Pregunta

Estoy tratando de generar imágenes ImageMagick de los datos SDL píxeles. Esto es lo que el GIF se ve como hasta ahora. (Este GIF es más lenta que la de abajo a propósito.)

http://www.starlon.net/images/combo.gif

Esto es lo que se supone que debe ser similar. Nótese en la imagen superior que los píxeles parecen estar sobrepuesto en la parte superior de otros píxeles.

http://www.starlon.net/images/combo2.gif

Aquí es donde el GIF se crea realmente.

void DrvSDL::WriteGif() {
    std::list<Magick::Image> gif;

    for(std::list<Magick::Blob>::iterator it = image_.begin(); it != image_.end(); it++) {
        Magick::Geometry geo(cols_ * pixels.x, rows_ * pixels.y);
        Magick::Image image(*it, geo, 32, "RGB");
        gif.push_back(image);
        LCDError("image");
    }
    for_each(gif.begin(), gif.end(), Magick::animationDelayImage(ani_speed_));
    Magick::writeImages(gif.begin(), gif.end(), gif_file_);
}

Y aquí es donde está empaquetado el Blob.

image_.push_back(Magick::Blob(surface_->pixels, rows_ * pixels.y * surface_->pitch));

Y aquí es cómo inicializar la superficie SDL.

surface_ = SDL_SetVideoMode(cols_ * pixels.x, rows_ * pixels.y, 32, SDL_SWSURFACE);
¿Fue útil?

Solución

La imagen superior es causado normalmente por un tampón de desalineado. El buffer de SDL es probable que no DWORD alineado y el ImageMagick rutinas esperar el búfer para alinearse en una DWORD. Esto es muy común en el procesamiento de mapa de bits. El popular biblioteca de procesamiento de imágenes - LeadTools, comúnmente, requiere datos DWORD alineado. Esto es sobre todo caso con monocromo y 32 bits de color, pero puede ser el caso para cualquier profundidad de color.

Lo que hay que hacer es escribir un mapa de bits alineados DWORD de su memoria intermedia SDL o al menos crear un búfer que está alineado DWORD.

La documentación de la API ImageMagick puede ser capaz de ayudar a aclarar más a fondo.

Otros consejos

Otra cosa que puede que desee probar es limpiar las memorias intermedias para asegurarse de que no hay ningún dato que ya están allí. Realmente no sé API de mensajería instantánea, pero píxeles superpuestos en la parte superior de otros píxeles por lo general indica un buffer sucia.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top