16 #ifndef TUTORIAL_WRITE_PNG_H 17 #define TUTORIAL_WRITE_PNG_H 19 #include "exception.h" 24 #include <agg_color_rgba.h> 32 getPngColorType<agg::rgba8> () {
return PNG_COLOR_TYPE_RGBA; }
43 template<
class RendererBaseType>
51 outFile = fopen (fileName,
"wb");
52 if (outFile ==
nullptr)
57 pngPtr = png_create_write_struct (PNG_LIBPNG_VER_STRING,
61 ASSERT(pngPtr !=
nullptr);
63 infoPtr = png_create_info_struct(pngPtr);
64 ASSERT(infoPtr !=
nullptr);
66 if (setjmp(png_jmpbuf(pngPtr)))
71 png_init_io(pngPtr, outFile);
73 int pngColorType = getPngColorType<typename RendererBaseType::color_type> ();
74 const int width = rBase.width ();
75 const int height = rBase.height ();
76 const int valueSize =
sizeof(
typename RendererBaseType::color_type::value_type);
83 getPngColorType<typename RendererBaseType::color_type> (),
85 PNG_COMPRESSION_TYPE_DEFAULT,
86 PNG_FILTER_TYPE_DEFAULT);
88 png_write_info(pngPtr, infoPtr);
90 png_bytep *rows =
new png_bytep[height];
91 for (
int y = 0; y < height; ++y)
93 rows[y] = (png_bytep)rBase.ren ().pix_ptr (0, y);
96 png_write_image(pngPtr, rows);
99 png_write_end(pngPtr, NULL);
101 png_destroy_write_struct(&pngPtr, &infoPtr);
104 #endif // TUTORIAL_WRITE_PNG_H