| @@ -165,13 +165,13 @@ Image PNGImageFormat::decodeImage (InputStream& in) | |||
| pngReadStruct = png_create_read_struct (PNG_LIBPNG_VER_STRING, 0, 0, 0); | |||
| if (pngReadStruct != 0) | |||
| if (pngReadStruct != nullptr) | |||
| { | |||
| try | |||
| { | |||
| pngInfoStruct = png_create_info_struct (pngReadStruct); | |||
| if (pngInfoStruct == 0) | |||
| if (pngInfoStruct == nullptr) | |||
| { | |||
| png_destroy_read_struct (&pngReadStruct, 0, 0); | |||
| return Image::null; | |||
| @@ -213,21 +213,20 @@ Image PNGImageFormat::decodeImage (InputStream& in) | |||
| || pngInfoStruct->num_trans > 0; | |||
| // Load the image into a temp buffer in the pnglib format.. | |||
| HeapBlock <uint8> tempBuffer (height * (width << 2)); | |||
| const size_t lineStride = width * 4; | |||
| HeapBlock <uint8> tempBuffer (height * lineStride); | |||
| { | |||
| HeapBlock <png_bytep> rows (height); | |||
| for (int y = (int) height; --y >= 0;) | |||
| rows[y] = (png_bytep) (tempBuffer + (width << 2) * y); | |||
| HeapBlock <png_bytep> rows (height); | |||
| for (int y = (int) height; --y >= 0;) | |||
| rows[y] = (png_bytep) (tempBuffer + lineStride * y); | |||
| try | |||
| { | |||
| png_read_image (pngReadStruct, rows); | |||
| png_read_end (pngReadStruct, pngInfoStruct); | |||
| } | |||
| catch (PNGHelpers::PNGErrorStruct&) | |||
| {} | |||
| try | |||
| { | |||
| png_read_image (pngReadStruct, rows); | |||
| png_read_end (pngReadStruct, pngInfoStruct); | |||
| } | |||
| catch (PNGHelpers::PNGErrorStruct&) | |||
| {} | |||
| png_destroy_read_struct (&pngReadStruct, &pngInfoStruct, 0); | |||
| @@ -239,15 +238,11 @@ Image PNGImageFormat::decodeImage (InputStream& in) | |||
| hasAlphaChan = image.hasAlphaChannel(); // (the native image creator may not give back what we expect) | |||
| const Image::BitmapData destData (image, Image::BitmapData::writeOnly); | |||
| uint8* srcRow = tempBuffer; | |||
| uint8* destRow = destData.data; | |||
| for (int y = 0; y < (int) height; ++y) | |||
| { | |||
| const uint8* src = srcRow; | |||
| srcRow += (width << 2); | |||
| uint8* dest = destRow; | |||
| destRow += destData.lineStride; | |||
| const uint8* src = rows[y]; | |||
| uint8* dest = destData.getLinePointer (y); | |||
| if (hasAlphaChan) | |||
| { | |||
| @@ -286,14 +281,14 @@ bool PNGImageFormat::writeImageToStream (const Image& image, OutputStream& out) | |||
| png_structp pngWriteStruct = png_create_write_struct (PNG_LIBPNG_VER_STRING, 0, 0, 0); | |||
| if (pngWriteStruct == 0) | |||
| if (pngWriteStruct == nullptr) | |||
| return false; | |||
| png_infop pngInfoStruct = png_create_info_struct (pngWriteStruct); | |||
| if (pngInfoStruct == 0) | |||
| if (pngInfoStruct == nullptr) | |||
| { | |||
| png_destroy_write_struct (&pngWriteStruct, (png_infopp) 0); | |||
| png_destroy_write_struct (&pngWriteStruct, (png_infopp) nullptr); | |||
| return false; | |||
| } | |||