Domanda

Sto cercando di generare immagini ImageMagick da dati pixel SDL. Ecco ciò che il GIF sembra finora. (Questo GIF è più lento di quello di sotto di proposito.)

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

Ecco quello che si suppone per assomigliare. Notate nell'immagine sopra che i pixel sembrano essere sovrapposto in cima ad altre pixel.

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

Ecco dove il GIF è effettivamente creato.

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_);
}

E qui è dove il Blob è imballato.

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

Ed ecco come ho inizializzare la superficie SDL.

surface_ = SDL_SetVideoMode(cols_ * pixels.x, rows_ * pixels.y, 32, SDL_SWSURFACE);
È stato utile?

Soluzione

L'immagine in alto è normalmente causato da un buffer disallineato. Il buffer SDL non è probabilmente DWORD allineato e il ImageMagick routine si aspettano il buffer da allineare su un DWORD. Questo è molto comune nella lavorazione bitmap. Il popolare libreria di elaborazione immagini - LEADTOOLS, comunemente, richiede dati DWORD allineato. Questo è per lo più in bianco e nero e caso con colore a 32 bit, ma può essere il caso per qualsiasi profondità di colore.

Quello che dovete fare è scrivere un DWORD bitmap allineato dal buffer di SDL o creare almeno un buffer che viene DWORD allineato.

La documentazione API ImageMagick può essere in grado di aiutare a chiarire questo ulteriore.

Altri suggerimenti

Un'altra cosa che si potrebbe desiderare di provare è quello di cancellare i buffer per assicurarsi che non v'è alcun dato già lì. Io non so davvero API di messaggistica istantanea, ma pixel sovrapposto in cima ad altre pixel di solito indica un buffer sporco.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top