管道 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 图像查看器不起作用的主要内容,如果未能解决你的问题,请参考以下文章