]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/imagbmp.cpp
declare all NameStr[] strings as const char using the correct WXDLLIMPEXP_DATA_ macro...
[wxWidgets.git] / src / common / imagbmp.cpp
index fc67b7731307c719f5972214b05f943708c4929b..4ba94c276e1afafa00ee804570c6ee12469be081 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,
@@ -481,18 +484,18 @@ bool wxBMPHandler::DoLoadDib(wxImage * image, int width, int height,
 {
     wxInt32         aDword, rmask = 0, gmask = 0, bmask = 0, amask = 0;
     int             rshift = 0, gshift = 0, bshift = 0, ashift = 0;
-    int             rbits = 0, gbits = 0, bbits = 0, abits = 0;
+    int             rbits = 0, gbits = 0, bbits = 0;
     wxInt32         dbuf[4];
     wxInt8          bbuf[4];
     wxUint8         aByte;
     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;
         }
     }
@@ -626,7 +631,6 @@ bool wxBMPHandler::DoLoadDib(wxImage * image, int width, int height,
             rshift = 16;
             gshift = 8;
             bshift = 0;
-            abits = 8;
             rbits = 8;
             gbits = 8;
             bbits = 8;
@@ -879,8 +883,6 @@ bool wxBMPHandler::DoLoadDib(wxImage * image, int width, int height,
         }
     }
 
-    delete[] cmap;
-
     image->SetMask(false);
 
     const wxStreamError err = stream.GetLastError();