diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c index b0cba47bb29..8efa128d126 100644 --- a/dlls/gdiplus/graphics.c +++ b/dlls/gdiplus/graphics.c @@ -1995,7 +1995,8 @@ GpStatus WINGDIPAPI GdipDrawImagePointsRect(GpGraphics *graphics, GpImage *image else return NotImplemented; - if (ptf[1].Y != ptf[0].Y || ptf[2].X != ptf[0].X) + if (imageAttributes || + ptf[1].Y != ptf[0].Y || ptf[2].X != ptf[0].X) use_software = 1; else if (graphics->image && graphics->image->type == ImageTypeBitmap) { @@ -2084,6 +2085,35 @@ GpStatus WINGDIPAPI GdipDrawImagePointsRect(GpGraphics *graphics, GpImage *image GdipDeleteMatrix(dst_to_src); + if (imageAttributes) + { + if (imageAttributes->colorremaptables[ColorAdjustTypeBitmap].enabled || + imageAttributes->colorremaptables[ColorAdjustTypeDefault].enabled) + { + const struct color_remap_table *table; + + if (imageAttributes->colorremaptables[ColorAdjustTypeBitmap].enabled) + table = &imageAttributes->colorremaptables[ColorAdjustTypeBitmap]; + else + table = &imageAttributes->colorremaptables[ColorAdjustTypeDefault]; + + for (x=dst_area.left; xmapsize; i++) + { + if (*src_color == table->colormap[i].oldColor.Argb) + { + *src_color = table->colormap[i].newColor.Argb; + break; + } + } + } + } + } + stat = alpha_blend_pixels(graphics, dst_area.left, dst_area.top, data, dst_area.right - dst_area.left, dst_area.bottom - dst_area.top, stride); diff --git a/dlls/gdiplus/tests/image.c b/dlls/gdiplus/tests/image.c index fdfd2b29ea9..74e6ee1db23 100644 --- a/dlls/gdiplus/tests/image.c +++ b/dlls/gdiplus/tests/image.c @@ -1879,7 +1879,7 @@ static void test_remaptable(void) stat = GdipBitmapGetPixel(bitmap2, 0, 0, &color); expect(Ok, stat); - todo_wine ok(color_match(0xffff00ff, color, 1), "Expected ffff00ff, got %.8x\n", color); + ok(color_match(0xffff00ff, color, 1), "Expected ffff00ff, got %.8x\n", color); GdipDeleteGraphics(graphics); GdipDisposeImage((GpImage*)bitmap1);