Question

Je suis en train de générer ImageMagick images données SDL de pixels . Voici ce que le GIF ressemble jusqu'à présent. (Ce GIF est plus lent que celui ci-dessous sur le but.)

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

Voici ce qu'il est censé ressembler. Notez dans l'image ci-dessus que les pixels semblent être superposées sur d'autres pixels.

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

Voici où le GIF est effectivement créée.

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

Et voici où le Blob est emballé.

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

Et voici comment j'initialiser la surface SDL.

surface_ = SDL_SetVideoMode(cols_ * pixels.x, rows_ * pixels.y, 32, SDL_SWSURFACE);
Était-ce utile?

La solution

L'image supérieure est normalement provoquée par un tampon désalignée. Le tampon SDL est probablement pas DWORD aligné et le ImageMagick routines attendent la mémoire tampon à aligner sur une DWORD. Ceci est très fréquent dans le traitement des images bitmap. La bibliothèque de traitement d'images populaires - LEADTOOLS, souvent, nécessite des données alignées DWORD. Cela est surtout le cas avec monochrome et couleur 32 bits, mais peut être le cas pour une profondeur de couleur.

Ce que vous devez faire est d'écrire un bitmap DWORD aligné à partir de votre tampon de SDL ou au moins créer un tampon qui est DWORD aligné.

La documentation de l'API ImageMagick peut être en mesure d'aider à clarifier davantage cette question.

Autres conseils

Une autre chose que vous pourriez vouloir essayer est de vider les tampons pour assurer qu'il n'y a pas de données déjà là. Je ne sais pas vraiment l'API de messagerie instantanée, mais les pixels superposés à d'autres pixels indique généralement un tampon sale.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top