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
This commit is contained in:
Paul Cornett
2009-08-19 06:00:13 +00:00
parent ab52bac815
commit 38e23f1020

View File

@@ -599,7 +599,7 @@ bool wxBMPHandler::DoLoadDib(wxImage * image, int width, int height,
{ {
if ( comp == BI_BITFIELDS ) if ( comp == BI_BITFIELDS )
{ {
int bit = 0; int bit;
stream.Read(dbuf, 4 * 3); stream.Read(dbuf, 4 * 3);
rmask = wxINT32_SWAP_ON_BE(dbuf[0]); rmask = wxINT32_SWAP_ON_BE(dbuf[0]);
gmask = wxINT32_SWAP_ON_BE(dbuf[1]); 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 // NOTE: seeking a positive amount in wxFromCurrent mode allows us to
// load even non-seekable streams (see wxInputStream::SeekI docs)! // load even non-seekable streams (see wxInputStream::SeekI docs)!
if (stream.SeekI(bmpOffset, wxFromCurrent) == wxInvalidOffset) const wxFileOffset pos = stream.TellI();
return false; if (pos != wxInvalidOffset && bmpOffset > pos)
if (stream.SeekI(bmpOffset - pos, wxFromCurrent) == wxInvalidOffset)
return false;
//else: icon, just carry on //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++) 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 ) if ( index >= 16 )
index = 15; index = 15;
ptr[poffset] = cmap[index].r; ptr[poffset] = cmap[index].r;
@@ -865,15 +867,15 @@ bool wxBMPHandler::DoLoadDib(wxImage * image, int width, int height,
stream.Read(&aWord, 2); stream.Read(&aWord, 2);
aWord = wxUINT16_SWAP_ON_BE(aWord); aWord = wxUINT16_SWAP_ON_BE(aWord);
linepos += 2; 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 to retrieve the color data out of the word. Then
shift it left by (8 - number of bits) such that shift it left by (8 - number of bits) such that
the image has the proper dynamic range */ 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; ptr[poffset] = temp;
temp = (unsigned char)((aWord & gmask) >> gshift << (8-gbits)); temp = (unsigned char)(((aWord & gmask) >> gshift) << (8-gbits));
ptr[poffset + 1] = temp; ptr[poffset + 1] = temp;
temp = (unsigned char)((aWord & bmask) >> bshift << (8-bbits)); temp = (unsigned char)(((aWord & bmask) >> bshift) << (8-bbits));
ptr[poffset + 2] = temp; ptr[poffset + 2] = temp;
column++; column++;
} }