管道 ppm 图像到 eog 图像查看器不起作用

Posted

技术标签:

【中文标题】管道 ppm 图像到 eog 图像查看器不起作用【英文标题】:Piping ppm image to eog image viewer not working 【发布时间】:2015-04-19 15:27:15 【问题描述】:

我正在使用 C++ 进行图像处理项目。要显示图像,我想使用默认的 ubuntu 图像查看器 (eog)。我的 Image16 类中有可以读写 PPM 文件的函数。我知道这些工作,因为我可以将它们写入硬盘,然后用 eog 打开它们。但是我不想将图像写入我的硬盘,因为我有一个 SSD,每个图像大约 100 Mb。我想直接将图像数据通过管道传输到 eog。然而,这会产生一个错误,我不知道为什么。

ifstream in("/home/chase/Desktop/moon.ppm");
Image16 img = Image16::read_ppm(in);
in.close();

FILE* f = popen("eog /dev/stdin", "w");
img.write_ppm(f, 255);
pclose(f);

我设法让它与 imagemagick display 和 feh 一起工作,但我真的不喜欢那些程序。如果可能,我想使用 eog。

【问题讨论】:

请不要张贴文字图片,尤其是代码!而是复制粘贴实际代码。 如果你用mkfifo()做一个管道,在后台把图片发送到管道,然后告诉eog从管道读取呢? mkfifo 是写入磁盘还是存储在内存中? 两者都不是。它将一个程序的输出传递给另一个程序的输入。就像programA | programB,只是中间的那位有名字。 那也没用。 【参考方案1】:

如果你真的坚持eog,你可以把它包起来。例如,一个粗略的 bash 函数

$ eog- ()  cat >/tmp/img && [ -s /tmp/img ] && eog "$@" /tmp/img; 
$ pngtopnm test.png | eog-

【讨论】:

以上是关于管道 ppm 图像到 eog 图像查看器不起作用的主要内容,如果未能解决你的问题,请参考以下文章

图像顶部的Android按钮不起作用

我用VC++写的存图像的程序,为啥保存了的BMP图像打不开,说是照片查看器不支持此个格式,

从图像控制保存图像不起作用

上传 UIImage 类型的图像列表(Xamarin)

引导日期选择器不起作用

通过 gatsby-node 将图像导入 GraphQL 不起作用:缺少 childImageSharp