我正在编写一些图像处理例程。我的图像类支持以ppm(P6)格式读取和写入图像。要使用其他类型的图像,我想通过图像魔术转换将它们转换为ppm。为此,我需要转换以将ppm的内容写入stdout,因为我正在用管道读取它们(请注意,在临时文件中创建是 Not Acceptable )。

现在我有了这段代码。

void Image::read(const char* file)
{
    std::string cmd = std::string("convert \"") + file + std::string("\" -depth 16 -format ppm /dev/stdout");

    std::cout << cmd << std::endl;

    FILE* f = popen(cmd.c_str(), "r");
    img_assert(f, "Could not start conversion process.");

    try
    {
        read_ppm(f);
    }
    catch(...)
    {
        pclose(f);
        img_assert(false, "Conversion failed.");
    }

    pclose(f);
}

popen使用的命令如下。convert "/home/chase/Desktop/m27.jpg" -depth 16 -format ppm /dev/stdout
当我在终端中运行此文件时,由于文件的第一行不是以P6开头,因此我无法获得正确的PPM输出。什么是执行此操作的适当命令行?

最佳答案

您可能想要:

convert input.jpg -depth 16 ppm:

这将为您提供P6二进制数据,或者
convert input.jpg -depth 16 -compress none ppm:

这将为您提供P3 ASCII数据

关于c++ - 如何使imagemagick将输出ppm转换为stdout,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33201401/

10-11 22:15