Skip to content

Commit fa29db4

Browse files
committed
Fix blending of semi-opaque pixels in average and bilinear resamplers (#4875)
1 parent 51f98b0 commit fa29db4

File tree

3 files changed

+11
-11
lines changed

3 files changed

+11
-11
lines changed

mapresample.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -671,7 +671,7 @@ msAverageRasterResampler( imageObj *psSrcImage, rasterBufferObj *src_rb,
671671
alpha = (unsigned char)
672672
MAX(0,MIN(255,255*dfAlpha01+0.5));
673673

674-
RB_SET_PIXEL(dst_rb,nDstX,nDstY,
674+
RB_MIX_PIXEL(dst_rb,nDstX,nDstY,
675675
red, green, blue, alpha );
676676
}
677677
#ifdef USE_GD

maputil.c

+9-9
Original file line numberDiff line numberDiff line change
@@ -2096,19 +2096,19 @@ void msAlphaBlendPM( unsigned char red_src, unsigned char green_src,
20962096
/* Cases with actual blending. */
20972097
/* -------------------------------------------------------------------- */
20982098
if(!alpha_dst || *alpha_dst == 255) {
2099-
int weight_dst = 256 - alpha_src;
2099+
int weight_dst = 255 - alpha_src;
21002100

2101-
*red_dst = (256 * red_src + *red_dst * weight_dst) >> 8;
2102-
*green_dst = (256 * green_src + *green_dst * weight_dst) >> 8;
2103-
*blue_dst = (256 * blue_src + *blue_dst * weight_dst) >> 8;
2101+
*red_dst = (alpha_src * red_src + *red_dst * weight_dst) >> 8;
2102+
*green_dst = (alpha_src * green_src + *green_dst * weight_dst) >> 8;
2103+
*blue_dst = (alpha_src * blue_src + *blue_dst * weight_dst) >> 8;
21042104
} else {
2105-
int weight_dst = (256 - alpha_src);
2105+
int weight_dst = (255 - alpha_src);
21062106

2107-
*red_dst = (256 * red_src + *red_dst * weight_dst) >> 8;
2108-
*green_dst = (256 * green_src + *green_dst * weight_dst) >> 8;
2109-
*blue_dst = (256 * blue_src + *blue_dst * weight_dst) >> 8;
2107+
*red_dst = (alpha_src * red_src + *red_dst * weight_dst) >> 8;
2108+
*green_dst = (alpha_src * green_src + *green_dst * weight_dst) >> 8;
2109+
*blue_dst = (alpha_src * blue_src + *blue_dst * weight_dst) >> 8;
21102110

2111-
*alpha_dst = (256 * alpha_src + *alpha_dst * weight_dst) >> 8;
2111+
*alpha_dst = (255 * alpha_src + *alpha_dst * weight_dst) >> 8;
21122112
}
21132113
}
21142114

msautotest

Submodule msautotest updated from 39f8724 to 4e40228

0 commit comments

Comments
 (0)