Dmitry Timoshkov : gdiplus: Avoid not necessary memory allocation for palette entries.
Alexandre Julliard
julliard at winehq.org
Tue Jan 15 13:46:17 CST 2013
Module: wine
Branch: master
Commit: 44e554b744edd4e241118caada0972d7d2f163f8
URL: http://source.winehq.org/git/wine.git/?a=commit;h=44e554b744edd4e241118caada0972d7d2f163f8
Author: Dmitry Timoshkov <dmitry at baikal.ru>
Date: Tue Jan 15 12:48:34 2013 +0800
gdiplus: Avoid not necessary memory allocation for palette entries.
---
dlls/gdiplus/image.c | 31 +++++++++----------------------
1 files 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);
}
More information about the wine-cvs
mailing list