Frage

Ich versuche ImageMagick Bilder von SDL Pixeldaten. Hier ist, was die GIF Aussehen so weit gefallen. (Diese GIF ist langsamer als die unten am Gehäuse vorbei.)

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

Hier ist, was es aussehen soll. Beachten Sie in dem obigen Bild, dass die Pixel erscheinen überlagert auf andere Pixel werden.

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

Hier ist, wo die GIF tatsächlich erstellt wird.

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

Und hier ist, wo die Blob gepackt ist.

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

Und hier ist, wie ich die SDL Oberfläche initialisieren.

surface_ = SDL_SetVideoMode(cols_ * pixels.x, rows_ * pixels.y, 32, SDL_SWSURFACE);
War es hilfreich?

Lösung

Das obere Bild wird in der Regel durch einen falsch ausgerichteten Puffer verursacht. Der SDL-Puffer wird wahrscheinlich nicht DWORD ausgerichtet und die ImageMagick Routinen erwarten, dass der Puffer auf ein ausgerichtet werden DWORD. Dies ist sehr häufig in Bitmap-Verarbeitung. Die beliebte Bildverarbeitungs-Bibliothek - Leadtools, häufig erfordert DWORD ausgerichtet Daten. Dies ist vor allem Fall mit Schwarzweiß- und 32-Bit-Farbe, kann aber der Fall für jede Farbtiefe sein.

Was müssen Sie tun ist, schreiben Sie einen DWORD ausgerichtet Bitmap aus dem SDL-Puffer oder zumindest schafft einen Puffer, die DWORD ausgerichtet ist.

Die ImageMagick API-Dokumentation zu Hilfe in der Lage sein diese weiter zu klären.

Andere Tipps

Eine andere Sache, die Sie vielleicht ausprobieren möchten, um die Puffer zu löschen, um sicherzustellen, gibt es keine Daten, die bereits dort. Ich weiß nicht wirklich IMs API, aber auf andere Pixel überlagerten Pixel zeigt in der Regel einen schmutzigen Puffer.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top