diff --git a/dlls/gdiplus/gdiplus.spec b/dlls/gdiplus/gdiplus.spec index c49a3953fa4..b1881703cb4 100644 --- a/dlls/gdiplus/gdiplus.spec +++ b/dlls/gdiplus/gdiplus.spec @@ -174,7 +174,7 @@ @ stub GdipDrawEllipseI @ stub GdipDrawImage @ stub GdipDrawImageFX -@ stub GdipDrawImageI +@ stdcall GdipDrawImageI(ptr ptr long long) @ stub GdipDrawImagePointRect @ stub GdipDrawImagePointRectI @ stub GdipDrawImagePoints diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c index 57ad025d880..8d31661f159 100644 --- a/dlls/gdiplus/graphics.c +++ b/dlls/gdiplus/graphics.c @@ -989,6 +989,33 @@ GpStatus WINGDIPAPI GdipDrawCurve2(GpGraphics *graphics, GpPen *pen, return retval; } +GpStatus WINGDIPAPI GdipDrawImageI(GpGraphics *graphics, GpImage *image, INT x, + INT y) +{ + UINT width, height, srcw, srch; + + if(!graphics || !image) + return InvalidParameter; + + GdipGetImageWidth(image, &width); + GdipGetImageHeight(image, &height); + + srcw = width * (((REAL) INCH_HIMETRIC) / + ((REAL) GetDeviceCaps(graphics->hdc, LOGPIXELSX))); + srch = height * (((REAL) INCH_HIMETRIC) / + ((REAL) GetDeviceCaps(graphics->hdc, LOGPIXELSY))); + + if(image->type != ImageTypeMetafile){ + y += height; + height *= -1; + } + + IPicture_Render(image->picture, graphics->hdc, x, y, width, height, + 0, 0, srcw, srch, NULL); + + return Ok; +} + /* FIXME: partially implemented */ GpStatus WINGDIPAPI GdipDrawImagePointsRect(GpGraphics *graphics, GpImage *image, GDIPCONST GpPointF *points, INT count, REAL srcx, REAL srcy, REAL srcwidth, diff --git a/include/gdiplusflat.h b/include/gdiplusflat.h index aba71ed287e..08f0696f92c 100644 --- a/include/gdiplusflat.h +++ b/include/gdiplusflat.h @@ -58,6 +58,7 @@ GpStatus WINGDIPAPI GdipDrawArc(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL,REAL,REAL GpStatus WINGDIPAPI GdipDrawBezier(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL,REAL, REAL,REAL,REAL); GpStatus WINGDIPAPI GdipDrawCurve2(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT,REAL); +GpStatus WINGDIPAPI GdipDrawImageI(GpGraphics*,GpImage*,INT,INT); GpStatus WINGDIPAPI GdipDrawImagePointsRect(GpGraphics*,GpImage*, GDIPCONST GpPointF*,INT,REAL,REAL,REAL,REAL,GpUnit, GDIPCONST GpImageAttributes*,DrawImageAbort,VOID*);