Cómo establecer un intervalo en milisegundos entre los cuadros de un gif con Imagemagick++
Creando un Gif utilizando ImageMagick 6.9.7.4.
Convierto un vector de QImage en un tipo de imagen de ImageMagick y creo un gif utilizando el método estático. Pero el gif resultante es muy rápido, ¿cómo puedo establecer un intervalo entre los cuadros o hacer que el gif sea más lento?
std::vector
for (QImage &image:m_listOfImages)
{
qDebug()<< image.size();
{
listOfImages.push_back(QImageToImage(image));
}
}
qDebug()<< listOfImages.size();
QString gifName=QDateTime::currentDateTime().toString(QStringLiteral(“hh-mm-ss”))+”.gif”;
Magick::writeImages(listOfImages.begin(), listOfImages.end(), gifName.toStdString());
qDebug()<< “Hecho”;
y QImage a Magick::Image
Magick::Image DspPresenter::QImageToImage(QImage &qimage)
{
qDebug() << “toImage:” << qimage.width() << 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 < qimage.height(); ++y)
{
pixels = newImage.setPixels(0, y, newImage.columns(), 1);
for (int x = 0; x < 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;
}
davy.ai
Para agregar un intervalo entre los marcos en el gif resultante, debes establecer el tiempo de retraso para cada marco. Puedes hacer esto creando un vector de tiempos de retraso, donde cada valor corresponde al tiempo de retraso para cada marco en el vector
listOfImages
.Aquí está el código actualizado para establecer un tiempo de retraso de 100 ms para cada marco:
En el bucle
for
que crea el vectorlistOfImages
, también agregamos tiempos de retraso para cada marco al vectordelayTimes
. Luego, antes de escribir las imágenes para crear el gif, establecemos el tiempo de retraso para cada marco utilizando el métodoanimationDelay
deMagick::Image
.Esto debería resultar en un gif más lento con un tiempo de retraso de 100 ms entre los marcos. Ajusta el tiempo de retraso a tu preferencia.