Commit 28e34588 authored by Vincent Povirk's avatar Vincent Povirk Committed by Alexandre Julliard

gdiplus: Implement GdipCreateHBITMAPFromBitmap.

parent 88bc3426
......@@ -447,11 +447,69 @@ GpStatus WINGDIPAPI GdipCreateBitmapFromResource(HINSTANCE hInstance,
GpStatus WINGDIPAPI GdipCreateHBITMAPFromBitmap(GpBitmap* bitmap,
HBITMAP* hbmReturn, ARGB background)
{
FIXME("stub\n");
GpStatus stat;
HBITMAP result, oldbitmap;
UINT width, height;
HDC hdc;
GpGraphics *graphics;
BITMAPINFOHEADER bih;
void *bits;
TRACE("(%p,%p,%x)\n", bitmap, hbmReturn, background);
if (!bitmap || !hbmReturn) return InvalidParameter;
GdipGetImageWidth((GpImage*)bitmap, &width);
GdipGetImageHeight((GpImage*)bitmap, &height);
bih.biSize = sizeof(bih);
bih.biWidth = width;
bih.biHeight = height;
bih.biPlanes = 1;
bih.biBitCount = 32;
bih.biCompression = BI_RGB;
bih.biSizeImage = 0;
bih.biXPelsPerMeter = 0;
bih.biYPelsPerMeter = 0;
bih.biClrUsed = 0;
bih.biClrImportant = 0;
hdc = CreateCompatibleDC(NULL);
if (!hdc) return GenericError;
result = CreateDIBSection(hdc, (BITMAPINFO*)&bih, DIB_RGB_COLORS, &bits,
NULL, 0);
if (result)
{
oldbitmap = SelectObject(hdc, result);
stat = GdipCreateFromHDC(hdc, &graphics);
if (stat == Ok)
{
stat = GdipGraphicsClear(graphics, background);
if (hbmReturn) *hbmReturn = NULL;
if (stat == Ok)
stat = GdipDrawImage(graphics, (GpImage*)bitmap, 0, 0);
return NotImplemented;
GdipDeleteGraphics(graphics);
}
SelectObject(hdc, oldbitmap);
}
else
stat = GenericError;
DeleteDC(hdc);
if (stat != Ok && result)
{
DeleteObject(result);
result = NULL;
}
*hbmReturn = result;
return stat;
}
GpStatus WINGDIPAPI GdipConvertToEmfPlus(const GpGraphics* ref,
......
......@@ -760,14 +760,14 @@ static void test_createhbitmap(void)
/* test NULL values */
stat = GdipCreateHBITMAPFromBitmap(NULL, &hbitmap, 0);
todo_wine expect(InvalidParameter, stat);
expect(InvalidParameter, stat);
stat = GdipCreateHBITMAPFromBitmap(bitmap, NULL, 0);
todo_wine expect(InvalidParameter, stat);
expect(InvalidParameter, stat);
/* create HBITMAP */
stat = GdipCreateHBITMAPFromBitmap(bitmap, &hbitmap, 0);
todo_wine expect(Ok, stat);
expect(Ok, stat);
if (stat == Ok)
{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment