[2/3] gdiplus: Avoid not necessary memory allocation for palette entries.

Dmitry Timoshkov dmitry at baikal.ru
Mon Jan 14 22:48:34 CST 2013


---
 dlls/gdiplus/image.c | 31 +++++++++----------------------
 1 file changed, 9 insertions(+), 22 deletions(-)

diff --git a/dlls/gdiplus/image.c b/dlls/gdiplus/image.c
index 558e300..377cab1 100644
--- a/dlls/gdiplus/image.c
+++ b/dlls/gdiplus/image.c
@@ -4724,28 +4724,17 @@ GpStatus WINGDIPAPI GdipCreateBitmapFromHBITMAP(HBITMAP hbm, HPALETTE hpal, GpBi
 
         if (retval == Ok && hpal)
         {
-            WORD num_palette_entries;
-            PALETTEENTRY *palette_entries=NULL;
+            PALETTEENTRY entry[256];
             ColorPalette *palette=NULL;
-            int i;
+            int i, num_palette_entries;
 
-            if (!GetObjectW(hpal, sizeof(num_palette_entries), &num_palette_entries))
+            num_palette_entries = GetPaletteEntries(hpal, 0, 256, entry);
+            if (!num_palette_entries)
                 retval = GenericError;
 
-            if (retval == Ok)
-            {
-                palette_entries = GdipAlloc(sizeof(PALETTEENTRY) * num_palette_entries);
-                palette = GdipAlloc(sizeof(ColorPalette) + sizeof(ARGB) * (num_palette_entries-1));
-
-                if (!palette_entries || !palette)
-                    retval = OutOfMemory;
-            }
-
-            if (retval == Ok)
-            {
-                if (!GetPaletteEntries(hpal, 0, num_palette_entries, palette_entries))
-                    retval = GenericError;
-            }
+            palette = GdipAlloc(sizeof(ColorPalette) + sizeof(ARGB) * (num_palette_entries-1));
+            if (!palette)
+                retval = OutOfMemory;
 
             if (retval == Ok)
             {
@@ -4754,15 +4743,13 @@ GpStatus WINGDIPAPI GdipCreateBitmapFromHBITMAP(HBITMAP hbm, HPALETTE hpal, GpBi
 
                 for (i=0; i<num_palette_entries; i++)
                 {
-                    PALETTEENTRY * entry = &palette_entries[i];
-                    palette->Entries[i] = 0xff000000 | entry->peRed << 16 |
-                        entry->peGreen << 8 | entry->peBlue;
+                    palette->Entries[i] = 0xff000000 | entry[i].peRed << 16 |
+                                          entry[i].peGreen << 8 | entry[i].peBlue;
                 }
 
                 retval = GdipSetImagePalette((GpImage*)*bitmap, palette);
             }
 
-            GdipFree(palette_entries);
             GdipFree(palette);
         }
 
-- 
1.8.0.2




More information about the wine-patches mailing list