From 279bf9e545a47b12bcf7e2c56342f5e3cba0f528 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sun, 2 Mar 2014 13:34:09 +0000 Subject: [PATCH] Fix loading of top to bottom BMP files in wxMSW wxBitmap. The native LoadImage() function used by wxBMPFileHandler only supports the standard bottom to top BMPs, fall back to our own implementation in wxImage wxBMPHandler if it fails to also support the top to bottom ones. Closes #13650. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@76043 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/msw/gdiimage.cpp | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/msw/gdiimage.cpp b/src/msw/gdiimage.cpp index 439cc916a7..cc9c9de4c0 100644 --- a/src/msw/gdiimage.cpp +++ b/src/msw/gdiimage.cpp @@ -393,15 +393,28 @@ bool wxBMPFileHandler::LoadFile(wxBitmap *bitmap, int WXUNUSED(desiredWidth), int WXUNUSED(desiredHeight)) { -#if wxUSE_WXDIB wxCHECK_MSG( bitmap, false, wxT("NULL bitmap in LoadFile") ); +#if wxUSE_WXDIB + // Try loading using native Windows LoadImage() first. wxDIB dib(name); + if ( dib.IsOk() ) + return bitmap->CopyFromDIB(dib); +#endif // wxUSE_WXDIB + + // Some valid bitmap files are not supported by LoadImage(), e.g. those + // with negative height. Try to use our own bitmap loading code which does + // support them. +#if wxUSE_IMAGE + wxImage img(name, wxBITMAP_TYPE_BMP); + if ( img.IsOk() ) + { + *bitmap = wxBitmap(img); + return true; + } +#endif // wxUSE_IMAGE - return dib.IsOk() && bitmap->CopyFromDIB(dib); -#else return false; -#endif } bool wxBMPFileHandler::SaveFile(const wxBitmap *bitmap,