gif: fix color table clipping (for cb5.gif)
This commit is contained in:
parent
a6f7507661
commit
a44a1dbd19
1 changed files with 4 additions and 8 deletions
|
@ -376,7 +376,7 @@ static
|
||||||
uchar*
|
uchar*
|
||||||
decode(Header *h, Rawimage *i, Entry *tbl)
|
decode(Header *h, Rawimage *i, Entry *tbl)
|
||||||
{
|
{
|
||||||
int c, doclip, incode, codesize, CTM, EOD, pici, datai, stacki, nbits, sreg, fc, code, piclen;
|
int c, incode, codesize, CTM, EOD, pici, datai, stacki, nbits, sreg, fc, code, piclen;
|
||||||
int csize, nentry, maxentry, first, ocode, ndata, nb;
|
int csize, nentry, maxentry, first, ocode, ndata, nb;
|
||||||
uchar clip, *p, *pic;
|
uchar clip, *p, *pic;
|
||||||
uchar stack[4096], data[256];
|
uchar stack[4096], data[256];
|
||||||
|
@ -386,10 +386,6 @@ decode(Header *h, Rawimage *i, Entry *tbl)
|
||||||
codesize = h->buf[0];
|
codesize = h->buf[0];
|
||||||
if(codesize>8 || 0>codesize)
|
if(codesize>8 || 0>codesize)
|
||||||
giferror(h, "ReadGIF: can't handle codesize %d", codesize);
|
giferror(h, "ReadGIF: can't handle codesize %d", codesize);
|
||||||
doclip = 0;
|
|
||||||
if(i->cmap!=nil && i->cmaplen!=3*(1<<codesize)
|
|
||||||
&& (codesize!=2 || i->cmaplen!=3*2)) /* peculiar GIF bitmap files... */
|
|
||||||
doclip = 1;
|
|
||||||
|
|
||||||
CTM =1<<codesize;
|
CTM =1<<codesize;
|
||||||
EOD = CTM+1;
|
EOD = CTM+1;
|
||||||
|
@ -490,10 +486,10 @@ decode(Header *h, Rawimage *i, Entry *tbl)
|
||||||
}
|
}
|
||||||
|
|
||||||
Return:
|
Return:
|
||||||
if(doclip){
|
if(i->cmap!=nil && i->cmaplen!=3*256){
|
||||||
clip = i->cmaplen/3;
|
clip = (i->cmaplen/3)-1;
|
||||||
for(p = pic; p < pic+piclen; p++)
|
for(p = pic; p < pic+piclen; p++)
|
||||||
if(*p >= clip)
|
if(*p > clip)
|
||||||
*p = clip;
|
*p = clip;
|
||||||
}
|
}
|
||||||
h->pic = nil;
|
h->pic = nil;
|
||||||
|
|
Loading…
Reference in a new issue