我正在使用GIFLIB加载gif文件,我想从每个帧中提取RGB数据。
我已经使用DGifSlurp加载了文件,但是我无法精确地确定如何从SavedImage结构中获取RGB数据。尽管我已经猜到了如何进行两个测试,但是似乎第三个测试由于内存异常而崩溃。库中应该使用一个函数,还是简单的代码?
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);
}
在此示例gif中读取13的第三帧时,它因内存异常而崩溃
请问我应该使用什么代码从SavedImage结构中获取RGB数据?
谢谢
肖恩
答案 0 :(得分:0)
啊。 SavedImage结构具有左上角的宽度和高度值,因此我读取了太多数据,因此出现了内存异常。否则,代码似乎可以正常工作,至少可以使用我拥有的gif。