From: Paul Cornett Date: Wed, 19 Aug 2009 06:00:13 +0000 (+0000) Subject: Fix loading BMPs, broken in r60852. Parenthesize shift expressions. X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/38e23f1020dcf6882d8e21b862d4755d8a76cf8a Fix loading BMPs, broken in r60852. Parenthesize shift expressions. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61708 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/common/imagbmp.cpp b/src/common/imagbmp.cpp index bf232cd51a..c50ddff713 100644 --- a/src/common/imagbmp.cpp +++ b/src/common/imagbmp.cpp @@ -599,7 +599,7 @@ bool wxBMPHandler::DoLoadDib(wxImage * image, int width, int height, { if ( comp == BI_BITFIELDS ) { - int bit = 0; + int bit; stream.Read(dbuf, 4 * 3); rmask = wxINT32_SWAP_ON_BE(dbuf[0]); gmask = wxINT32_SWAP_ON_BE(dbuf[1]); @@ -661,8 +661,10 @@ bool wxBMPHandler::DoLoadDib(wxImage * image, int width, int height, { // NOTE: seeking a positive amount in wxFromCurrent mode allows us to // load even non-seekable streams (see wxInputStream::SeekI docs)! - if (stream.SeekI(bmpOffset, wxFromCurrent) == wxInvalidOffset) - return false; + const wxFileOffset pos = stream.TellI(); + if (pos != wxInvalidOffset && bmpOffset > pos) + if (stream.SeekI(bmpOffset - pos, wxFromCurrent) == wxInvalidOffset) + return false; //else: icon, just carry on } @@ -776,7 +778,7 @@ bool wxBMPHandler::DoLoadDib(wxImage * image, int width, int height, { for (int nibble = 0; nibble < 2 && column < width; nibble++) { - int index = ((aByte & (0xF0 >> nibble * 4)) >> (!nibble * 4)); + int index = ((aByte & (0xF0 >> (nibble * 4))) >> (!nibble * 4)); if ( index >= 16 ) index = 15; ptr[poffset] = cmap[index].r; @@ -865,15 +867,15 @@ bool wxBMPHandler::DoLoadDib(wxImage * image, int width, int height, stream.Read(&aWord, 2); aWord = wxUINT16_SWAP_ON_BE(aWord); linepos += 2; - /* use the masks and calculated amonut of shift + /* Use the masks and calculated amount of shift to retrieve the color data out of the word. Then shift it left by (8 - number of bits) such that the image has the proper dynamic range */ - temp = (unsigned char)((aWord & rmask) >> rshift << (8-rbits)); + temp = (unsigned char)(((aWord & rmask) >> rshift) << (8-rbits)); ptr[poffset] = temp; - temp = (unsigned char)((aWord & gmask) >> gshift << (8-gbits)); + temp = (unsigned char)(((aWord & gmask) >> gshift) << (8-gbits)); ptr[poffset + 1] = temp; - temp = (unsigned char)((aWord & bmask) >> bshift << (8-bbits)); + temp = (unsigned char)(((aWord & bmask) >> bshift) << (8-bbits)); ptr[poffset + 2] = temp; column++; }