【问题标题】:Piping ppm image to eog image viewer not working管道 ppm 图像到 eog 图像查看器不起作用
【发布时间】: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,只是中间的那位有名字。
  • 那也没用。

标签: c++ linux ubuntu image-processing pipe


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多