Pergunta

Estou tentando gerar Imagemagick imagens de Sdl dados de pixels. Aqui está a aparência do GIF até agora. (Este gif é mais lento que o abaixo de propósito.)

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

Aqui está a aparência. Observe na imagem acima que os pixels parecem estar sobrepostos em cima de outros pixels.

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

Aqui é onde o GIF é realmente criado.

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 é aqui que a bolha está embalada.

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

E eis como eu inicializo a superfície do SDL.

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

Solução

A imagem superior é normalmente causada por um tampão desalinhado. O buffer SDL provavelmente não está alinhado e o Imagemagick As rotinas esperam que o buffer seja alinhado em um DWORD. Isso é muito comum no processamento de bitmap. A Biblioteca de Processamento de Imagens Popular - Leadtools, geralmente, requer dados alinhados do DWORD. Este é principalmente o caso com monocromático e cor de 32 bits, mas pode ser o caso de qualquer profundidade de cor.

O que você precisa fazer é escrever um bitmap alinhado do DWORD do seu buffer SDL ou Pelo menos crie um buffer que esteja alinhado.

A documentação da API ImageMagick pode ajudar a esclarecer isso ainda mais.

Outras dicas

Outra coisa que você pode querer tentar é limpar os buffers para garantir que ainda não haja dados. Eu realmente não sei a API do IM, mas os pixels sobrepostos sobre outros pixels geralmente indicam um buffer sujo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top