gdiplus: Don't use gdi32 to scale or draw from outside bitmaps.
This commit is contained in:
parent
8b6dafda45
commit
2302e80cc9
|
@ -2465,10 +2465,18 @@ GpStatus WINGDIPAPI GdipDrawImagePointsRect(GpGraphics *graphics, GpImage *image
|
||||||
else
|
else
|
||||||
return NotImplemented;
|
return NotImplemented;
|
||||||
|
|
||||||
|
srcx = srcx * dx;
|
||||||
|
srcy = srcy * dy;
|
||||||
|
srcwidth = srcwidth * dx;
|
||||||
|
srcheight = srcheight * dy;
|
||||||
|
|
||||||
if (imageAttributes ||
|
if (imageAttributes ||
|
||||||
(graphics->image && graphics->image->type == ImageTypeBitmap) ||
|
(graphics->image && graphics->image->type == ImageTypeBitmap) ||
|
||||||
!((GpBitmap*)image)->hbitmap ||
|
!((GpBitmap*)image)->hbitmap ||
|
||||||
ptf[1].Y != ptf[0].Y || ptf[2].X != ptf[0].X)
|
ptf[1].Y != ptf[0].Y || ptf[2].X != ptf[0].X ||
|
||||||
|
ptf[1].X - ptf[0].X != srcwidth || ptf[2].Y - ptf[0].Y != srcheight ||
|
||||||
|
srcx < 0 || srcy < 0 ||
|
||||||
|
srcx + srcwidth > bitmap->width || srcy + srcheight > bitmap->height)
|
||||||
use_software = 1;
|
use_software = 1;
|
||||||
|
|
||||||
if (use_software)
|
if (use_software)
|
||||||
|
@ -2488,11 +2496,6 @@ GpStatus WINGDIPAPI GdipDrawImagePointsRect(GpGraphics *graphics, GpImage *image
|
||||||
if (!imageAttributes)
|
if (!imageAttributes)
|
||||||
imageAttributes = &defaultImageAttributes;
|
imageAttributes = &defaultImageAttributes;
|
||||||
|
|
||||||
srcx = srcx * dx;
|
|
||||||
srcy = srcy * dy;
|
|
||||||
srcwidth = srcwidth * dx;
|
|
||||||
srcheight = srcheight * dy;
|
|
||||||
|
|
||||||
dst_area.left = dst_area.right = pti[0].x;
|
dst_area.left = dst_area.right = pti[0].x;
|
||||||
dst_area.top = dst_area.bottom = pti[0].y;
|
dst_area.top = dst_area.bottom = pti[0].y;
|
||||||
for (i=1; i<4; i++)
|
for (i=1; i<4; i++)
|
||||||
|
@ -2672,12 +2675,12 @@ GpStatus WINGDIPAPI GdipDrawImagePointsRect(GpGraphics *graphics, GpImage *image
|
||||||
bf.AlphaFormat = AC_SRC_ALPHA;
|
bf.AlphaFormat = AC_SRC_ALPHA;
|
||||||
|
|
||||||
GdiAlphaBlend(graphics->hdc, pti[0].x, pti[0].y, pti[1].x-pti[0].x, pti[2].y-pti[0].y,
|
GdiAlphaBlend(graphics->hdc, pti[0].x, pti[0].y, pti[1].x-pti[0].x, pti[2].y-pti[0].y,
|
||||||
hdc, srcx*dx, srcy*dy, srcwidth*dx, srcheight*dy, bf);
|
hdc, srcx, srcy, srcwidth, srcheight, bf);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
StretchBlt(graphics->hdc, pti[0].x, pti[0].y, pti[1].x-pti[0].x, pti[2].y-pti[0].y,
|
StretchBlt(graphics->hdc, pti[0].x, pti[0].y, pti[1].x-pti[0].x, pti[2].y-pti[0].y,
|
||||||
hdc, srcx*dx, srcy*dy, srcwidth*dx, srcheight*dy, SRCCOPY);
|
hdc, srcx, srcy, srcwidth, srcheight, SRCCOPY);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (temp_hdc)
|
if (temp_hdc)
|
||||||
|
|
Loading…
Reference in New Issue