Я использую 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