From 060672216dcf9b53b7e26c3947940f4ad20a49a1 Mon Sep 17 00:00:00 2001 From: Vincent Povirk Date: Thu, 15 Apr 2010 15:24:25 -0500 Subject: [PATCH 4/6] gdiplus: Implement color remapping. --- dlls/gdiplus/graphics.c | 32 +++++++++++++++++++++++++++++++- dlls/gdiplus/tests/image.c | 2 +- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c index e61c456..c3dfdbe 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 0ca22e5..456d383 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); -- 1.6.3.3