Как получить данные о цвете RGB из структуры GIFLIB SavedImage - PullRequest
0 голосов
/ 18 июня 2019

Я использую GIFLIB для загрузки в файл GIF и хочу извлечь данные RGB из каждого кадра.

Я использовал DGifSlurp для загрузки в файл, но я не могу понять, как именно получить данные RGB из структуры SavedImage. Два теста, кажется, работают, хотя я догадался, как это сделать, но третий вылетает с исключением памяти. Есть ли в библиотеке функция, которую я должен использовать, или есть простой код?

void    TestGIF()
{
    int error=0;
    GifFileType * gif=DGifOpenFileName("d:/exampleGIF3.gif",&error);

    error=DGifSlurp(gif);

    unsigned int  h=gif->SHeight;
    unsigned int w=gif->SWidth;

    int i,j;
    unsigned char * d=malloc(w*h*4);
    unsigned char * save=d;

    for(i=0;i<gif->ImageCount;i++)
    {
        d=save;
        SavedImage * p=&gif->SavedImages[i];

        for(j=0;j<w*h;j++)
        {
            int c=p->RasterBits[j];
            if(c==gif->SBackGroundColor)
            {
                d+=4;           //use last frame colour
            }
            else
            {
                GifColorType rgb=gif->SColorMap->Colors[c];
                *d++=rgb.Blue;
                *d++=rgb.Green;
                *d++=rgb.Red;
                *d++=0xff;
            }
        }
        char outname[512];
        sprintf(outname,"d:/image%02d.tga",i);

        SAVETGA(outname,save,w,h,4);
    }
    free(save);
    error=DGifCloseFile(gif, &error);       
}

Вылетает с исключением памяти при чтении третьего кадра 13 в этом примере gif

Какой код я должен использовать для получения данных RGB из структуры SavedImage, пожалуйста?

Спасибо

Shaun

1 Ответ

0 голосов
/ 19 июня 2019

Ах. Структура SavedImage имеет верхние левые значения ширины и высоты, поэтому я читал слишком много данных, отсюда исключение памяти. В противном случае кажется, что код работает, по крайней мере, с GIF-файлами, которые у меня есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...