Генерация анимации Magick ++ с использованием пиксельных данных SDL

StackOverflow https://stackoverflow.com/questions/1957665

  •  21-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь генерировать Магия изображений изображения из SDL пиксельные данные.Вот как пока выглядит GIF-файл.(Этот GIF специально сделан медленнее, чем приведенный ниже.)

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

Вот как это должно выглядеть.Обратите внимание на приведенном выше изображении, что пиксели, кажется, наложены поверх других пикселей.

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

Вот где на самом деле создается GIF-файл.

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

И вот здесь упакован Шарик.

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

И вот как я инициализирую SDL surface.

surface_ = SDL_SetVideoMode(cols_ * pixels.x, rows_ * pixels.y, 32, SDL_SWSURFACE);
Это было полезно?

Решение

Верхнее изображение обычно возникает из-за смещенного буфера.Буфер SDL, вероятно, не выровнен по DWORD, и Магия изображений подпрограммы ожидают, что буфер будет выровнен по DWORD.Это очень распространено при обработке растровых изображений.Популярная библиотека обработки изображений Leadtools, как правило, требует данных, выровненных по DWORD.В основном это касается монохромного и 32-битного цвета, но может иметь место для любой глубины цвета.

Что вам нужно сделать, это записать растровое изображение, выровненное по DWORD, из вашего SDL-буфера или по крайней мере, создайте буфер, выровненный по DWORD.

Документация ImageMagick API может помочь прояснить это дополнительно.

Другие советы

Еще одна вещь, которую вы, возможно, захотите попробовать, - это очистить буферы, чтобы убедиться, что там уже нет никаких данных.Я действительно не знаю API IM, но пиксели, наложенные поверх других пикселей, обычно указывают на загрязненный буфер.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top