Huw Davies : gdiplus: Partial implementation of GdipCreateBitmapFromGdiDib.
Alexandre Julliard
julliard at winehq.org
Thu Jul 10 14:07:27 CDT 2008
Module: wine
Branch: master
Commit: b2ebf709ffa859bc4515bf0c12ba4c347ce3a293
URL: http://source.winehq.org/git/wine.git/?a=commit;h=b2ebf709ffa859bc4515bf0c12ba4c347ce3a293
Author: Huw Davies <huw at codeweavers.com>
Date: Thu Jul 10 15:39:29 2008 +0100
gdiplus: Partial implementation of GdipCreateBitmapFromGdiDib.
---
dlls/gdiplus/gdiplus.spec | 2 +-
dlls/gdiplus/image.c | 41 +++++++++++++++++++++++++++++++++++++++++
include/gdiplusflat.h | 1 +
3 files changed, 43 insertions(+), 1 deletions(-)
diff --git a/dlls/gdiplus/gdiplus.spec b/dlls/gdiplus/gdiplus.spec
index 318ec53..b1c784d 100644
--- a/dlls/gdiplus/gdiplus.spec
+++ b/dlls/gdiplus/gdiplus.spec
@@ -73,7 +73,7 @@
@ stub GdipCreateBitmapFromDirectDrawSurface
@ stdcall GdipCreateBitmapFromFile(wstr ptr)
@ stdcall GdipCreateBitmapFromFileICM(wstr ptr)
-@ stub GdipCreateBitmapFromGdiDib
+@ stdcall GdipCreateBitmapFromGdiDib(ptr ptr ptr)
@ stdcall GdipCreateBitmapFromGraphics(long long ptr ptr)
@ stdcall GdipCreateBitmapFromHBITMAP(long long ptr)
@ stub GdipCreateBitmapFromHICON
diff --git a/dlls/gdiplus/image.c b/dlls/gdiplus/image.c
index 8fd452a..d2ce074 100644
--- a/dlls/gdiplus/image.c
+++ b/dlls/gdiplus/image.c
@@ -270,6 +270,47 @@ GpStatus WINGDIPAPI GdipCreateBitmapFromFile(GDIPCONST WCHAR* filename,
return stat;
}
+GpStatus WINGDIPAPI GdipCreateBitmapFromGdiDib(GDIPCONST BITMAPINFO* info,
+ VOID *bits, GpBitmap **bitmap)
+{
+ DWORD height, stride;
+ PixelFormat format;
+
+ FIXME("(%p, %p, %p) - partially implemented\n", info, bits, bitmap);
+
+ height = abs(info->bmiHeader.biHeight);
+ stride = ((info->bmiHeader.biWidth * info->bmiHeader.biBitCount + 31) >> 3) & ~3;
+
+ if(info->bmiHeader.biHeight > 0) /* bottom-up */
+ {
+ bits = (BYTE*)bits + (height - 1) * stride;
+ stride = -stride;
+ }
+
+ switch(info->bmiHeader.biBitCount) {
+ case 1:
+ format = PixelFormat1bppIndexed;
+ break;
+ case 4:
+ format = PixelFormat4bppIndexed;
+ break;
+ case 8:
+ format = PixelFormat8bppIndexed;
+ break;
+ case 24:
+ format = PixelFormat24bppRGB;
+ break;
+ default:
+ FIXME("don't know how to handle %d bpp\n", info->bmiHeader.biBitCount);
+ *bitmap = NULL;
+ return InvalidParameter;
+ }
+
+ return GdipCreateBitmapFromScan0(info->bmiHeader.biWidth, height, stride, format,
+ bits, bitmap);
+
+}
+
/* FIXME: no icm */
GpStatus WINGDIPAPI GdipCreateBitmapFromFileICM(GDIPCONST WCHAR* filename,
GpBitmap **bitmap)
diff --git a/include/gdiplusflat.h b/include/gdiplusflat.h
index ad40a67..25b6f5f 100644
--- a/include/gdiplusflat.h
+++ b/include/gdiplusflat.h
@@ -332,6 +332,7 @@ GpStatus WINGDIPAPI GdipConvertToEmfPlusToFile(const GpGraphics*,GpMetafile*,INT
GpStatus WINGDIPAPI GdipConvertToEmfPlusToStream(const GpGraphics*,GpMetafile*,INT*,IStream*,EmfType,const WCHAR*,GpMetafile**);
GpStatus WINGDIPAPI GdipCreateBitmapFromFile(GDIPCONST WCHAR*,GpBitmap**);
GpStatus WINGDIPAPI GdipCreateBitmapFromFileICM(GDIPCONST WCHAR*,GpBitmap**);
+GpStatus WINGDIPAPI GdipCreateBitmapFromGdiDib(GDIPCONST BITMAPINFO*,VOID*,GpBitmap**);
GpStatus WINGDIPAPI GdipCreateBitmapFromGraphics(INT,INT,GpGraphics*,GpBitmap**);
GpStatus WINGDIPAPI GdipCreateBitmapFromScan0(INT,INT,INT,PixelFormat,BYTE*,
GpBitmap**);
More information about the wine-cvs
mailing list