diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c index af95c7aeea..5126f94607 100644 --- a/dlls/gdiplus/graphics.c +++ b/dlls/gdiplus/graphics.c @@ -384,7 +384,12 @@ static GpStatus alpha_blend_bmp_pixels(GpGraphics *graphics, INT dst_x, INT dst_ src_color = ((ARGB*)(src + src_stride * y))[x]; if (comp_mode == CompositingModeSourceCopy) - GdipBitmapSetPixel(dst_bitmap, x+dst_x, y+dst_y, src_color); + { + if (!(src_color & 0xff000000)) + GdipBitmapSetPixel(dst_bitmap, x+dst_x, y+dst_y, 0); + else + GdipBitmapSetPixel(dst_bitmap, x+dst_x, y+dst_y, src_color); + } else { if (!(src_color & 0xff000000)) diff --git a/dlls/gdiplus/tests/image.c b/dlls/gdiplus/tests/image.c index bbb9365edb..0b4ae3cd9c 100644 --- a/dlls/gdiplus/tests/image.c +++ b/dlls/gdiplus/tests/image.c @@ -4491,7 +4491,7 @@ static void test_DrawImage_SourceCopy(void) expect(0, dst_pixels[0]); expect(0xffff0000, dst_pixels[1]); expect(0, dst_pixels[2]); - todo_wine expect(0, dst_pixels[3]); + expect(0, dst_pixels[3]); status = GdipDeleteGraphics(graphics); expect(Ok, status);