Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/render/pngfile.cc')
-rw-r--r--src/render/pngfile.cc79
1 files changed, 40 insertions, 39 deletions
diff --git a/src/render/pngfile.cc b/src/render/pngfile.cc
index d011aff..da434db 100644
--- a/src/render/pngfile.cc
+++ b/src/render/pngfile.cc
@@ -21,7 +21,8 @@ http://www.zarb.org/~gc/html/libpng.html
#include "render/pngfile.h"
#include "sys/sys.h"
-namespace render {
+namespace render
+{
Image *PNG::load(const char *filename)
{
@@ -58,14 +59,14 @@ Image *PNG::load(const char *filename)
}
png_infop info_ptr = png_create_info_struct(png_ptr);
- if (!info_ptr) {
- con_warn << "Error reading " << filename << ": png_create_info_struct failed!" << std::endl;
+ if (!info_ptr) {
+ con_warn << "Error reading " << filename << ": png_create_info_struct failed!" << std::endl;
filesystem::close(png_file);
png_destroy_read_struct(&png_ptr, 0, 0);
return 0;
}
- if (setjmp(png_jmpbuf(png_ptr))) {
- con_warn << "Error reading " << filename << ": error during init_io!" << std::endl;
+ if (setjmp(png_jmpbuf(png_ptr))) {
+ con_warn << "Error reading " << filename << ": error during init_io!" << std::endl;
filesystem::close(png_file);
png_destroy_read_struct(&png_ptr, &info_ptr, 0);
return 0;
@@ -73,19 +74,19 @@ Image *PNG::load(const char *filename)
/* read the PNG header */
png_init_io(png_ptr, png_file->handle());
- png_set_sig_bytes(png_ptr, 8);
+ png_set_sig_bytes(png_ptr, 8);
- png_read_info(png_ptr, info_ptr);
+ png_read_info(png_ptr, info_ptr);
- int png_width = info_ptr->width;
- int png_height = info_ptr->height;
- //int png_color_type = info_ptr->color_type;
- int png_depth = info_ptr->bit_depth;
+ int png_width = info_ptr->width;
+ int png_height = info_ptr->height;
+ //int png_color_type = info_ptr->color_type;
+ int png_depth = info_ptr->bit_depth;
- //int number_of_passes = png_set_interlace_handling(png_ptr);
+ //int number_of_passes = png_set_interlace_handling(png_ptr);
png_set_interlace_handling(png_ptr);
- png_read_update_info(png_ptr, info_ptr);
-
+ png_read_update_info(png_ptr, info_ptr);
+
if (png_depth != 8) {
con_warn << "Error reading " << filename << ": bits per channel must be 8!" << std::endl;
filesystem::close(png_file);
@@ -97,7 +98,7 @@ Image *PNG::load(const char *filename)
image = new Image(png_width, png_height, channels);
/* read image data */
- if (setjmp(png_jmpbuf(png_ptr))) {
+ if (setjmp(png_jmpbuf(png_ptr))) {
con_warn << "Error reading " << filename << std::endl;
filesystem::close(png_file);
delete image;
@@ -107,13 +108,13 @@ Image *PNG::load(const char *filename)
png_bytep row_pointers[png_height];
- for (size_t i=0; i < (size_t)png_height; i++)
- row_pointers[i] = (png_bytep) (*image)[i * info_ptr->rowbytes];
+ for (size_t i = 0; i < (size_t)png_height; i++)
+ row_pointers[i] = (png_bytep)(*image)[i * info_ptr->rowbytes];
// read pixel data
- png_read_image(png_ptr, row_pointers);
+ png_read_image(png_ptr, row_pointers);
- filesystem::close(png_file);
+ filesystem::close(png_file);
png_destroy_read_struct(&png_ptr, &info_ptr, 0);
con_debug << " " << filename << " " << image->width() << "x" << image->height() << "x" << image->bpp() << "bpp" << std::endl;
@@ -123,50 +124,50 @@ Image *PNG::load(const char *filename)
void PNG::save(const char *filename, Image & image)
{
- FILE *png_file = fopen(filename, "wb");
- if (!png_file) {
- con_warn << "Could not write " << filename << std::endl;
- return;
+ FILE *png_file = fopen(filename, "wb");
+ if (!png_file) {
+ con_warn << "Could not write " << filename << std::endl;
+ return;
}
- png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
- if (!png_ptr) {
+ png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
+ if (!png_ptr) {
fclose(png_file);
con_warn << "Error writing " << filename << ": png_create_write_struct failed!" << std::endl;
return;
}
- png_infop info_ptr = png_create_info_struct(png_ptr);
- if (!info_ptr) {
+ png_infop info_ptr = png_create_info_struct(png_ptr);
+ if (!info_ptr) {
con_warn << "Error writing " << filename << ": png_create_info_struct failed!" << std::endl;
fclose(png_file);
png_destroy_write_struct(&png_ptr, 0);
return;
}
- if (setjmp(png_jmpbuf(png_ptr))) {
+ if (setjmp(png_jmpbuf(png_ptr))) {
con_warn << "Error reading " << filename << ": error during init_io!" << std::endl;
fclose(png_file);
png_destroy_write_struct(&png_ptr, &info_ptr);
return;
}
- png_init_io(png_ptr, png_file);
+ png_init_io(png_ptr, png_file);
- /* write header */
- if (setjmp(png_jmpbuf(png_ptr))) {
+ /* write header */
+ if (setjmp(png_jmpbuf(png_ptr))) {
con_warn << "Error writing " << filename << ": error writing header!" << std::endl;
fclose(png_file);
png_destroy_write_struct(&png_ptr, &info_ptr);
return;
}
- png_set_IHDR(png_ptr, info_ptr, image.width(), image.height(), 8, PNG_COLOR_TYPE_RGB,
- PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
+ png_set_IHDR(png_ptr, info_ptr, image.width(), image.height(), 8, PNG_COLOR_TYPE_RGB,
+ PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
- png_write_info(png_ptr, info_ptr);
+ png_write_info(png_ptr, info_ptr);
- /* write image data */
+ /* write image data */
if (setjmp(png_jmpbuf(png_ptr))) {
con_warn << "Error writing " << filename << ": error writing header!" << std::endl;
fclose(png_file);
@@ -176,8 +177,8 @@ void PNG::save(const char *filename, Image & image)
png_bytep row_pointers[image.height()];
- for (size_t i = 0; i < image.height(); i++)
- row_pointers[i] = (png_bytep) image[i * image.width() * image.channels()];
+ for (size_t i = 0; i < image.height(); i++)
+ row_pointers[i] = (png_bytep) image[i * image.width() * image.channels()];
png_write_image(png_ptr, row_pointers);
@@ -189,9 +190,9 @@ void PNG::save(const char *filename, Image & image)
return;
}
- png_write_end(png_ptr, NULL);
+ png_write_end(png_ptr, NULL);
- fclose(png_file);
+ fclose(png_file);
png_destroy_write_struct(&png_ptr, &info_ptr);
con_print << "Wrote " << filename << std::endl;