Как установить инверсию в миллисекундах между кадрами gif с помощью Imagemagick

#c #qt #imagemagick

#c #qt #imagemagick

Вопрос:

Создание Gif-файла с помощью ImageMagick 6.9.7.4.

Я преобразую вектор QImage , в ImageMagick тип изображения и создаю gif, используя статический метод. Но полученный gif настолько быстр, как я могу установить интервал между кадрами или сделать gif немного медленным?

 std::vectorlt;Magick::Imagegt; listOfImages; for (QImage amp;image:m_listOfImages) {  qDebug()lt;lt; image.size();  {  listOfImages.push_back(QImageToImage(image));  } } qDebug()lt;lt; listOfImages.size(); QString gifName=QDateTime::currentDateTime().toString(QStringLiteral("hh-mm-ss")) ".gif"; Magick::writeImages(listOfImages.begin(), listOfImages.end(), gifName.toStdString()); qDebug()lt;lt; "Done";  

и QImage чтобы Magick::Image

 Magick::Image DspPresenter::QImageToImage(QImage amp;qimage) {  qDebug() lt;lt; "toImage:" lt;lt; qimage.width() lt;lt; qimage.height();   const Magick::Geometry geometry(qimage.width(), qimage.height());  const Magick::ColorRGB color(0.5, 0.2, 0.3);  Magick::Image newImage(geometry, color);  double scale = 1 / 256.0;  newImage.modifyImage();  Magick::PixelPacket *pixels;  Magick::ColorRGB mgc;  for (int y = 0; y lt; qimage.height();   y)  {  pixels = newImage.setPixels(0, y, newImage.columns(), 1);  for (int x = 0; x lt; qimage.width();   x)  {  QColor pix = qimage.pixel(x, y);  mgc.red(scale *pix.red());  mgc.green(scale *pix.green());  mgc.blue(scale *pix.blue());  *pixels   = mgc;  }  newImage.syncPixels();  }  return newImage; }  

Ответ №1:

 Image img1( "100x100", "white" ); img1.pixelColor( 49, 49, "red" ); frames.push_back(img1);  Image img2( "100x100", "red" ); img2.pixelColor( 49, 49, "white" ); frames.push_back(img2);  img1.animationDelay(2000); img2.animationDelay(2000);*/  Magick::writeImages(frames.begin(), frames.end(), "f:\2.gif");  

Конечно, вы должны установить animationDelay свойство в Magick::Image object