gdiplus: Implement color remapping.
This commit is contained in:
parent
bb9c1878c3
commit
4247247787
|
@ -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; x<dst_area.right; x++)
|
||||
for (y=dst_area.top; y<dst_area.bottom; y++)
|
||||
{
|
||||
ARGB *src_color;
|
||||
src_color = (ARGB*)(data + stride * (y - dst_area.top) + sizeof(ARGB) * (x - dst_area.left));
|
||||
for (i=0; i<table->mapsize; 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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue