Fix #405, -1 aims to reset the transparent color; refactor a bit; add test to existing test for -1

master
Pierre Joye 2021-08-25 18:44:02 +07:00
parent bdc281eadb
commit 67cc752b40
2 changed files with 23 additions and 10 deletions

View File

@ -895,19 +895,24 @@ BGD_DECLARE(void) gdImageColorDeallocate (gdImagePtr im, int color)
*/
BGD_DECLARE(void) gdImageColorTransparent (gdImagePtr im, int color)
{
if (color < 0) {
// Reset ::transparent
if (color == -1) {
im->transparent = -1;
}
if (color < -1) {
return;
}
if (im->trueColor) {
im->transparent = color;
return;
}
if (!im->trueColor) {
if (color >= gdMaxColors) {
return;
}
if (im->transparent != -1) {
im->alpha[im->transparent] = gdAlphaOpaque;
}
im->alpha[color] = gdAlphaTransparent;
// Palette Image
if (color >= gdMaxColors) {
return;
}
im->alpha[im->transparent] = gdAlphaOpaque;
im->alpha[color] = gdAlphaTransparent;
im->transparent = color;
}

View File

@ -15,6 +15,7 @@ int main()
if(im->transparent == pos) {
error = -1;
goto exit;
}
pos = -2;
@ -22,7 +23,14 @@ int main()
gdImageColorTransparent(im, pos);
if(im->transparent == pos) {
error = -1;
error = -2;
goto exit;
}
pos = -1;
gdImageColorTransparent(im, pos);
if(im->transparent == pos) {
error = -3;
}
gdImageDestroy(im);