mirror of
https://github.com/reactos/wine.git
synced 2024-11-28 22:20:26 +00:00
gdiplus: Implement GdipCreateHBITMAPFromBitmap.
This commit is contained in:
parent
88bc342612
commit
28e345882c
@ -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 (hbmReturn) *hbmReturn = NULL;
|
||||
if (!bitmap || !hbmReturn) return InvalidParameter;
|
||||
|
||||
return NotImplemented;
|
||||
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 (stat == Ok)
|
||||
stat = GdipDrawImage(graphics, (GpImage*)bitmap, 0, 0);
|
||||
|
||||
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)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user