X-Git-Url: https://git.jsancho.org/?p=lugaru.git;a=blobdiff_plain;f=Source%2FUtils%2FImageIO.cpp;h=124f1b7658cb660ed4dddc4e7fc34c44f7367ec5;hp=cff8dd194afb2d61fd7f7221f05b9b0cbb6a61e4;hb=b9a46d8e2b7e7e22c706e7dd3734f31015db4408;hpb=8b6e8f3ad7390309795eb35c0959264cb7924402 diff --git a/Source/Utils/ImageIO.cpp b/Source/Utils/ImageIO.cpp index cff8dd1..124f1b7 100644 --- a/Source/Utils/ImageIO.cpp +++ b/Source/Utils/ImageIO.cpp @@ -163,15 +163,18 @@ static bool load_png(const char* file_name, ImageRec& tex) } png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); - if (png_ptr == NULL) + if (png_ptr == NULL) { goto png_done; + } info_ptr = png_create_info_struct(png_ptr); - if (info_ptr == NULL) + if (info_ptr == NULL) { goto png_done; + } - if (setjmp(png_jmpbuf(png_ptr))) + if (setjmp(png_jmpbuf(png_ptr))) { goto png_done; + } png_init_io(png_ptr, fp); png_read_png(png_ptr, info_ptr, @@ -180,19 +183,23 @@ static bool load_png(const char* file_name, ImageRec& tex) png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, &interlace_type, NULL, NULL); - if (bit_depth != 8) // transform SHOULD handle this... + if (bit_depth != 8) { // transform SHOULD handle this... goto png_done; + } - if (color_type & PNG_COLOR_MASK_PALETTE) // !!! FIXME? + if (color_type & PNG_COLOR_MASK_PALETTE) { // !!! FIXME? goto png_done; + } - if ((color_type & PNG_COLOR_MASK_COLOR) == 0) // !!! FIXME? + if ((color_type & PNG_COLOR_MASK_COLOR) == 0) { // !!! FIXME? goto png_done; + } hasalpha = ((color_type & PNG_COLOR_MASK_ALPHA) != 0); row_pointers = png_get_rows(png_ptr, info_ptr); - if (!row_pointers) + if (!row_pointers) { goto png_done; + } if (!hasalpha) { png_byte* dst = tex.data; @@ -212,8 +219,9 @@ static bool load_png(const char* file_name, ImageRec& tex) else { png_byte* dst = tex.data; int pitch = width * 4; - for (int i = height - 1; i >= 0; i--, dst += pitch) + for (int i = height - 1; i >= 0; i--, dst += pitch) { memcpy(dst, row_pointers[i], pitch); + } } tex.sizeX = width; @@ -226,8 +234,9 @@ png_done: cerr << "There was a problem loading " << file_name << endl; } png_destroy_read_struct(&png_ptr, &info_ptr, NULL); - if (fp) + if (fp) { fclose(fp); + } return (retval); } @@ -247,33 +256,40 @@ static bool save_screenshot_png(const char* file_name) png_bytep* row_pointers = new png_bytep[kContextHeight]; png_bytep screenshot = new png_byte[kContextWidth * kContextHeight * 3]; - if ((!screenshot) || (!row_pointers)) + if ((!screenshot) || (!row_pointers)) { goto save_png_done; + } glGetError(); glReadPixels(0, 0, kContextWidth, kContextHeight, GL_RGB, GL_UNSIGNED_BYTE, screenshot); - if (glGetError() != GL_NO_ERROR) + if (glGetError() != GL_NO_ERROR) { goto save_png_done; + } - for (int i = 0; i < kContextHeight; i++) + for (int i = 0; i < kContextHeight; i++) { row_pointers[i] = screenshot + ((kContextWidth * ((kContextHeight - 1) - i)) * 3); + } png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); - if (png_ptr == NULL) + if (png_ptr == NULL) { goto save_png_done; + } info_ptr = png_create_info_struct(png_ptr); - if (info_ptr == NULL) + if (info_ptr == NULL) { goto save_png_done; + } - if (setjmp(png_jmpbuf(png_ptr))) + if (setjmp(png_jmpbuf(png_ptr))) { goto save_png_done; + } png_init_io(png_ptr, fp); - if (setjmp(png_jmpbuf(png_ptr))) + if (setjmp(png_jmpbuf(png_ptr))) { goto save_png_done; + } png_set_IHDR(png_ptr, info_ptr, kContextWidth, kContextHeight, 8, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, @@ -281,13 +297,15 @@ static bool save_screenshot_png(const char* file_name) png_write_info(png_ptr, info_ptr); - if (setjmp(png_jmpbuf(png_ptr))) + if (setjmp(png_jmpbuf(png_ptr))) { goto save_png_done; + } png_write_image(png_ptr, row_pointers); - if (setjmp(png_jmpbuf(png_ptr))) + if (setjmp(png_jmpbuf(png_ptr))) { goto save_png_done; + } png_write_end(png_ptr, NULL); retval = true; @@ -296,9 +314,11 @@ save_png_done: png_destroy_write_struct(&png_ptr, &info_ptr); delete[] screenshot; delete[] row_pointers; - if (fp) + if (fp) { fclose(fp); - if (!retval) + } + if (!retval) { unlink(file_name); + } return retval; }