Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用Magick++;没有动画损失_C++_Image Processing_Imagemagick_Gif - Fatal编程技术网

C++ 如何使用Magick++;没有动画损失

C++ 如何使用Magick++;没有动画损失,c++,image-processing,imagemagick,gif,C++,Image Processing,Imagemagick,Gif,下面是调整图像大小的代码: Image image; image.read( imagePath.toStdString() ); Geometry newSize = Geometry(m_newSize.width(), m_newSize.height()); newSize.aspect(true); image.resize(newSize); image.write(newImagePath.toStdString()); 此代码适用于非gif文件。对于gif文件,我将丢失动画:

下面是调整图像大小的代码:

Image image;
image.read( imagePath.toStdString() );
Geometry newSize = Geometry(m_newSize.width(), m_newSize.height());
newSize.aspect(true);
image.resize(newSize);
image.write(newImagePath.toStdString());
此代码适用于非gif文件。对于gif文件,我将丢失动画:


如何在不丢失动画的情况下调整gif文件的大小?

您必须使用readImages和animateImages将动画的所有帧读取到图像列表中,并将它们添加到动画中

请看下面的示例:

#包括
#包括
使用名称空间std;
使用名称空间Magick;
int main(int/*argc*/,char**/*argv*/)
{ 
列表图像列表;
readImages(&imageList,“test_image_anim.gif”);
图像附加;
appendImages(&appended,imageList.begin(),imageList.end());
写入(“added_image.miff”);
返回0;
}

唯一的问题是,文档中说,动画图像只能在X11下工作,我找到了一个解决方案!感谢MofX的正确指导

   Geometry newSize = Geometry(m_newSize.width(), m_newSize.height());
   newSize.aspect(true); 
   list<Image> frames;
   readImages(&frames, imagePath.toStdString());
   for (auto& image : frames)
        image.resize(newSize);
   writeImages(frames.begin(), frames.end(), newImagePath.toStdString());
Geometry newSize=Geometry(m_newSize.width(),m_newSize.height());
newSize.aspect(true);
列出框架;
readImages(&frames,imagePath.toStdString());
用于(自动和图像:帧)
图像。调整大小(新闻大小);
WriteImage(frames.begin()、frames.end()、newImagePath.TostString());

我试过这个。这不管用。我得到了所有帧都是水平序列的图像,但我需要gif动画。你不应该只是复制示例代码。。。在我指路之后,我希望你自己做一点工作。您必须使用animateImages而不是appendImages使其工作,然后将其保存为gif而不是miffI。例如,您不知道如何使用animateImages。此函数将列表迭代器作为参数并返回void。我怎样才能得到动画的效果并写出这个?coalesceImages方法也有同样的问题。据我在源代码中看到的,动画是在第一幅图像中生成的。因此,imageList[0]。write(“animation.gif”)应该创建动画文件。
   Geometry newSize = Geometry(m_newSize.width(), m_newSize.height());
   newSize.aspect(true); 
   list<Image> frames;
   readImages(&frames, imagePath.toStdString());
   for (auto& image : frames)
        image.resize(newSize);
   writeImages(frames.begin(), frames.end(), newImagePath.toStdString());