我正在编写一些图像处理例程。我的图像类支持以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/