【发布时间】:2016-01-17 00:45:53
【问题描述】:
我正在编写一些图像处理程序。我的图像类支持读取和写入 ppm (P6) 格式的图像。要使用其他类型的图像,我想通过图像魔术转换将它们转换为 ppm。为此,我需要转换以将 ppm 的内容写入标准输出,因为我正在使用管道读取它们(请注意,创建临时文件是不可接受的)。
现在我有这个代码。
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
当我在终端中运行它时,我没有得到正确的 PPM 输出,因为文件的第一行不是以 P6 开头的。执行此操作的正确命令行是什么?
【问题讨论】:
标签: c++ image imagemagick ppm