X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c96ea65713a8dd58ae40b10718723b5c92a303e3..4f55a07f9f4c6ba6905aaa8e584e6fb14771d278:/src/common/imagbmp.cpp?ds=sidebyside diff --git a/src/common/imagbmp.cpp b/src/common/imagbmp.cpp index 9f92b3c8fc..e443eb4147 100644 --- a/src/common/imagbmp.cpp +++ b/src/common/imagbmp.cpp @@ -68,9 +68,9 @@ bool wxBMPHandler::SaveFile(wxImage *image, } unsigned width = image->GetWidth(); - unsigned row_width = width * 3 + + unsigned row_width = width * 3 + (((width % 4) == 0) ? 0 : (4 - (width * 3) % 4)); - // each row must be aligned to dwords + // each row must be aligned to dwords struct { // BitmapHeader: @@ -78,7 +78,7 @@ bool wxBMPHandler::SaveFile(wxImage *image, wxUint32 filesize; // total file size, inc. headers wxUint32 reserved; // for future use wxUint32 data_offset; // image data offset in the file - + // BitmapInfoHeader: wxUint32 bih_size; // 2nd part's size wxUint32 width, height; // bitmap's dimensions @@ -94,19 +94,19 @@ bool wxBMPHandler::SaveFile(wxImage *image, hdr.magic = wxUINT16_SWAP_ON_BE(0x4D42/*'BM'*/); hdr.filesize = wxUINT32_SWAP_ON_BE( - hdr_size + + hdr_size + row_width * image->GetHeight() ); hdr.reserved = 0; hdr.data_offset = wxUINT32_SWAP_ON_BE(hdr_size); - + hdr.bih_size = wxUINT32_SWAP_ON_BE(hdr_size - 14); hdr.width = wxUINT32_SWAP_ON_BE(image->GetWidth()); hdr.height = wxUINT32_SWAP_ON_BE(image->GetHeight()); hdr.planes = wxUINT16_SWAP_ON_BE(1); // always 1 plane hdr.bpp = wxUINT16_SWAP_ON_BE(24); // always TrueColor hdr.compression = 0; // RGB uncompressed - hdr.size_of_bmp = wxUINT32_SWAP_ON_BE(row_width * image->GetHeight()); + hdr.size_of_bmp = wxUINT32_SWAP_ON_BE(row_width * image->GetHeight()); hdr.h_res = hdr.v_res = wxUINT32_SWAP_ON_BE(72); // 72dpi is standard hdr.num_clrs = 0; // maximal possible = 2^24 hdr.num_signif_clrs = 0; // all colors are significant @@ -129,7 +129,7 @@ bool wxBMPHandler::SaveFile(wxImage *image, !stream.Write(&hdr.v_res, 4) || !stream.Write(&hdr.num_clrs, 4) || !stream.Write(&hdr.num_signif_clrs, 4) - ) + ) { if (verbose) wxLogError(_("BMP: Couldn't write the file header.")); @@ -151,7 +151,7 @@ bool wxBMPHandler::SaveFile(wxImage *image, buffer[3 * x + 0] = buffer[3 * x + 2]; buffer[3 * x + 2] = tmpvar; } - + if (!stream.Write(buffer, row_width)) { if (verbose) @@ -185,8 +185,8 @@ bool wxBMPHandler::LoadFile( wxImage *image, wxInputStream& stream, bool verbose int rshift = 0, gshift = 0, bshift = 0; wxUint8 aByte; wxUint16 aWord; - wxInt32 dbuf[4], aDword, - rmask = 0, gmask = 0, bmask = 0; + wxInt32 dbuf[4]; + wxInt32 aDword, rmask = 0, gmask = 0, bmask = 0; wxInt8 bbuf[4]; struct _cmap { unsigned char r, g, b; @@ -201,7 +201,7 @@ bool wxBMPHandler::LoadFile( wxImage *image, wxInputStream& stream, bool verbose * Read the BMP header */ - stream.Read( &bbuf, 2 ); + stream.Read( bbuf, 2 ); stream.Read( dbuf, 4 * 4 ); #if 0 // unused @@ -487,7 +487,7 @@ bool wxBMPHandler::LoadFile( wxImage *image, wxInputStream& stream, bool verbose } else if (bpp == 24) { - stream.Read( &bbuf, 3 ); + stream.Read( bbuf, 3 ); linepos += 3; ptr[poffset ] = (unsigned char)bbuf[2]; ptr[poffset + 1] = (unsigned char)bbuf[1]; @@ -543,7 +543,7 @@ bool wxBMPHandler::DoCanRead( wxInputStream& stream ) { unsigned char hdr[2]; - stream.Read(&hdr, 2); + stream.Read(hdr, 2); stream.SeekI(-2, wxFromCurrent); return (hdr[0] == 'B' && hdr[1] == 'M'); }