]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/imagbmp.cpp
add a simple benchmark for wx and iconv converters benchmarking
[wxWidgets.git] / src / common / imagbmp.cpp
index fc67b7731307c719f5972214b05f943708c4929b..807d3a7067e7ad878d790beb37acb4e2ea2625d7 100644 (file)
@@ -33,6 +33,7 @@
 #include "wx/filefn.h"
 #include "wx/wfstream.h"
 #include "wx/quantize.h"
+#include "wx/scopeguard.h"
 #include "wx/anidecod.h"
 
 // For memcpy
@@ -194,8 +195,8 @@ bool wxBMPHandler::SaveDib(wxImage *image,
 
         case wxIMAGE_RESOLUTION_INCHES:
             // convert resolution in inches to resolution in centimeters
-            hres = (wxUint32)(100*mm2inches*hres);
-            vres = (wxUint32)(100*mm2inches*vres);
+            hres = (wxUint32)(10*mm2inches*hres);
+            vres = (wxUint32)(10*mm2inches*vres);
             // fall through to convert it to resolution in meters
 
         case wxIMAGE_RESOLUTION_CM:
@@ -469,10 +470,12 @@ bool wxBMPHandler::SaveDib(wxImage *image,
 }
 
 
-typedef struct
+struct BMPPalette
 {
+    static void Free(BMPPalette* pal) { delete [] pal; }
+
     unsigned char r, g, b;
-}  _cmap;
+};
 
 bool wxBMPHandler::DoLoadDib(wxImage * image, int width, int height,
                              int bpp, int ncolors, int comp,
@@ -488,11 +491,11 @@ bool wxBMPHandler::DoLoadDib(wxImage * image, int width, int height,
     wxUint16        aWord;
 
     // allocate space for palette if needed:
-    _cmap *cmap;
+    BMPPalette *cmap;
 
     if ( bpp < 16 )
     {
-        cmap = new _cmap[ncolors];
+        cmap = new BMPPalette[ncolors];
         if ( !cmap )
         {
             if (verbose)
@@ -500,8 +503,12 @@ bool wxBMPHandler::DoLoadDib(wxImage * image, int width, int height,
             return false;
         }
     }
-    else
+    else // no palette
+    {
         cmap = NULL;
+    }
+
+    wxON_BLOCK_EXIT1(&BMPPalette::Free, cmap);
 
     // destroy existing here instead of:
     image->Destroy();
@@ -513,7 +520,6 @@ bool wxBMPHandler::DoLoadDib(wxImage * image, int width, int height,
     {
         if ( verbose )
             wxLogError( _("BMP: Couldn't allocate memory.") );
-        delete[] cmap;
         return false;
     }
 
@@ -527,7 +533,6 @@ bool wxBMPHandler::DoLoadDib(wxImage * image, int width, int height,
         {
             if ( verbose )
                 wxLogError(_("BMP: Couldn't allocate memory."));
-            delete[] cmap;
             return false;
         }
     }
@@ -879,8 +884,6 @@ bool wxBMPHandler::DoLoadDib(wxImage * image, int width, int height,
         }
     }
 
-    delete[] cmap;
-
     image->SetMask(false);
 
     const wxStreamError err = stream.GetLastError();