[12/21] gdiplus: implemented GdipLoadImageFromStreamICM

Evan Stade estade at gmail.com
Tue Jul 31 21:15:48 CDT 2007


Hi,

changelog:
*implemented GdipLoadImageFromStreamICM
*added its declaration to public headers
*now all internal files that include gdiplus.h must include objbase.h
(for IStream type)

 dlls/gdiplus/brush.c           |    3 +++
 dlls/gdiplus/customlinecap.c   |    2 ++
 dlls/gdiplus/gdiplus.c         |    2 ++
 dlls/gdiplus/graphicspath.c    |    3 +++
 dlls/gdiplus/image.c           |   21 ++++++++++++++++-----
 dlls/gdiplus/imageattributes.c |    2 ++
 dlls/gdiplus/matrix.c          |    2 ++
 dlls/gdiplus/pathiterator.c    |    2 ++
 dlls/gdiplus/pen.c             |    3 +++
 include/gdiplusflat.h          |    1 +
 10 files changed, 36 insertions(+), 5 deletions(-)

-- 
Evan Stade
-------------- next part --------------
diff --git a/dlls/gdiplus/brush.c b/dlls/gdiplus/brush.c
index 76456bd..ce01ccb 100644
--- a/dlls/gdiplus/brush.c
+++ b/dlls/gdiplus/brush.c
@@ -18,6 +18,9 @@
 
 #include "windef.h"
 #include "wingdi.h"
+
+#include "objbase.h"
+
 #include "gdiplus.h"
 #include "gdiplus_private.h"
 
diff --git a/dlls/gdiplus/customlinecap.c b/dlls/gdiplus/customlinecap.c
index eb851c9..417a740 100644
--- a/dlls/gdiplus/customlinecap.c
+++ b/dlls/gdiplus/customlinecap.c
@@ -22,6 +22,8 @@ #include "windef.h"
 #include "winbase.h"
 #include "wingdi.h"
 
+#include "objbase.h"
+
 #include "gdiplus.h"
 #include "gdiplus_private.h"
 #include "wine/debug.h"
diff --git a/dlls/gdiplus/gdiplus.c b/dlls/gdiplus/gdiplus.c
index 041d6fe..edbfb1c 100644
--- a/dlls/gdiplus/gdiplus.c
+++ b/dlls/gdiplus/gdiplus.c
@@ -25,6 +25,8 @@ #include "winerror.h"
 #include "wine/debug.h"
 #include "wingdi.h"
 
+#include "objbase.h"
+
 #include "gdiplus.h"
 #include "gdiplus_private.h"
 
diff --git a/dlls/gdiplus/graphicspath.c b/dlls/gdiplus/graphicspath.c
index 4fe99e0..ea52408 100644
--- a/dlls/gdiplus/graphicspath.c
+++ b/dlls/gdiplus/graphicspath.c
@@ -24,6 +24,9 @@ #include "windef.h"
 #include "winbase.h"
 #include "winuser.h"
 #include "wingdi.h"
+
+#include "objbase.h"
+
 #include "gdiplus.h"
 #include "gdiplus_private.h"
 #include "wine/debug.h"
diff --git a/dlls/gdiplus/image.c b/dlls/gdiplus/image.c
index ba5a23e..00d0a58 100644
--- a/dlls/gdiplus/image.c
+++ b/dlls/gdiplus/image.c
@@ -20,10 +20,12 @@ #include <stdarg.h>
 
 #include "windef.h"
 #include "winbase.h"
+#include "winuser.h"
 #include "wingdi.h"
 
 #define COBJMACROS
 #include "objbase.h"
+#include "olectl.h"
 
 #include "gdiplus.h"
 #include "gdiplus_private.h"
@@ -172,15 +174,24 @@ GpStatus WINGDIPAPI GdipImageGetFrameCou
     return NotImplemented;
 }
 
+/* FIXME: no ICM */
 GpStatus WINGDIPAPI GdipLoadImageFromStreamICM(IStream* stream, GpImage **image)
 {
-    static int calls;
-
     if(!stream || !image)
         return InvalidParameter;
 
-    if(!(calls++))
-        FIXME("not implemented\n");
+    *image = GdipAlloc(sizeof(GpImage));
+    if(!*image) return OutOfMemory;
 
-    return NotImplemented;
+    if(OleLoadPicture(stream, 0, FALSE, &IID_IPicture,
+        (LPVOID*) &((*image)->picture)) != S_OK){
+        TRACE("Could not load picture\n");
+        GdipFree(*image);
+        return GenericError;
+    }
+
+    /* FIXME: use IPicture_get_Type to get image type */
+    (*image)->type = ImageTypeUnknown;
+
+    return Ok;
 }
diff --git a/dlls/gdiplus/imageattributes.c b/dlls/gdiplus/imageattributes.c
index 7c36780..29b8549 100644
--- a/dlls/gdiplus/imageattributes.c
+++ b/dlls/gdiplus/imageattributes.c
@@ -19,6 +19,8 @@
 #include "windef.h"
 #include "wingdi.h"
 
+#include "objbase.h"
+
 #include "gdiplus.h"
 #include "gdiplus_private.h"
 #include "wine/debug.h"
diff --git a/dlls/gdiplus/matrix.c b/dlls/gdiplus/matrix.c
index 1c4738e..e6be418 100644
--- a/dlls/gdiplus/matrix.c
+++ b/dlls/gdiplus/matrix.c
@@ -23,6 +23,8 @@ #include "windef.h"
 #include "winbase.h"
 #include "wingdi.h"
 
+#include "objbase.h"
+
 #include "gdiplus.h"
 #include "gdiplus_private.h"
 
diff --git a/dlls/gdiplus/pathiterator.c b/dlls/gdiplus/pathiterator.c
index b978c26..d1e4e88 100644
--- a/dlls/gdiplus/pathiterator.c
+++ b/dlls/gdiplus/pathiterator.c
@@ -22,6 +22,8 @@ #include "windef.h"
 #include "winbase.h"
 #include "wingdi.h"
 
+#include "objbase.h"
+
 #include "gdiplus.h"
 #include "gdiplus_private.h"
 
diff --git a/dlls/gdiplus/pen.c b/dlls/gdiplus/pen.c
index b85f158..f121380 100644
--- a/dlls/gdiplus/pen.c
+++ b/dlls/gdiplus/pen.c
@@ -21,6 +21,9 @@ #include <stdarg.h>
 #include "windef.h"
 #include "winbase.h"
 #include "wingdi.h"
+
+#include "objbase.h"
+
 #include "gdiplus.h"
 #include "gdiplus_private.h"
 #include "wine/debug.h"
diff --git a/include/gdiplusflat.h b/include/gdiplusflat.h
index 4906160..348d7c0 100644
--- a/include/gdiplusflat.h
+++ b/include/gdiplusflat.h
@@ -148,6 +148,7 @@ GpStatus WINGDIPAPI GdipGetImageVertical
 GpStatus WINGDIPAPI GdipGetImageWidth(GpImage*,UINT*);
 GpStatus WINGDIPAPI GdipGetMetafileHeaderFromMetafile(GpMetafile*,MetafileHeader*);
 GpStatus WINGDIPAPI GdipImageGetFrameCount(GpImage*,GDIPCONST GUID*,UINT*);
+GpStatus WINGDIPAPI GdipLoadImageFromStreamICM(IStream*,GpImage**);
 
 GpStatus WINGDIPAPI GdipCreateImageAttributes(GpImageAttributes**);
 GpStatus WINGDIPAPI GdipDisposeImageAttributes(GpImageAttributes*);
-- 
1.4.1


More information about the wine-patches mailing list