Imagemagick c api:如何从gif文件中读取png图像frmaes,使用什么调用



所以我使用 MagickCoalesceImages 调用从 5 个 png 文件创建了 gif 文件并将其存储在磁盘上。 如何从 gif 文件中读回这些文件? MagickReadImage无济于事

没有看到代码很难提供帮助,但我可以假设您创建了 5 张图像,例如......

MagickWand
* gif2png;
gif2png = NewMagickWand();
MagickReadImage(gif2png, "input.gif");
MagickWriteImages(gif2png, "output_%02d.png", MagickFalse);
gif2png = DestroyMagickWand(gif2png);

如何从 gif 文件中读回这些文件?

您将使用MagickReadImage从文件中解码图像,并使用MagickAddImage将解码的图像追加到图像堆栈上。

MagickWand
* png2gif,
* temp;
// Create a blank image-stack.
png2gif = NewMagickWand();
char filename[PATH_MAX];  // PATH_MAX provided by limits.h
// Iterate over images to append.
for (int i = 0; i < 5; ++i) {
sprintf(filename, "output_%02d.png", i);
// Read image from disk.
temp = NewMagickWand();
MagickReadImage(temp, filename);
// Add "frame" to stack.
MagickAddImage(png2gif, temp);
temp = DestroyMagickWand(temp);
}
MagickWriteImages(png2gif, "output.gif", MagickTrue);
png2gif = DestroyMagickWand(png2gif);

警告:上面的示例省略了基本的错误处理,并假定文件名是连续的系列。


更新

从注释中,如果您希望将单个帧提取为 PNG 文件,有几种方法。

最快的方法是使用MagickWriteImages

MagickWriteImages(img, "output_%02d.png", MagickFalse);

或者使用图像堆栈迭代器。

for (MagickSetFirstIterator(img); MagickHasNextImage(img); MagickNextImage(img)) {
MagickWriteImage(img, "output_%02d.png");
}

或者,如果定义了 PNG 文件名,并且您需要映射它们。

const char * filenames[5] = {
"first.png",
"second.png",
"third.png",
"forth.png",
"fifth.png"
};
for (int i = 0; i < 5; ++i) {
MagickSetIteratorIndex(img, i);
MagickWriteImage(img, filenames[i]);
}

如果不看到代码,我们就无法提供太多帮助,只能猜测可接受的解决方案是什么。

相关内容

  • 没有找到相关文章

最新更新