#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