-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdump_png.cpp
More file actions
31 lines (28 loc) · 1.02 KB
/
Copy pathdump_png.cpp
File metadata and controls
31 lines (28 loc) · 1.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#ifdef __APPLE__
#include </usr/local/include/png.h>
#else
#include <png.h>
#endif
#include <cassert>
#include "minigl.h"
void Dump_png(MGLpixel* data,int width,int height,const char* filename)
{
FILE* file=fopen(filename,"wb");
assert(file);
png_structp png_ptr=png_create_write_struct(PNG_LIBPNG_VER_STRING,0,0,0);
assert(png_ptr);
png_infop info_ptr=png_create_info_struct(png_ptr);
assert(info_ptr);
bool result=setjmp(png_jmpbuf(png_ptr));
assert(!result);
png_init_io(png_ptr,file);
int color_type=PNG_COLOR_TYPE_RGBA;
png_set_IHDR(png_ptr,info_ptr,width,height,8,color_type,PNG_INTERLACE_NONE,PNG_COMPRESSION_TYPE_DEFAULT,PNG_FILTER_TYPE_DEFAULT);
MGLpixel** row_pointers=new MGLpixel*[height];
for(int j=0;j<height;j++) row_pointers[j]=data+width*(height-j-1);
png_set_rows(png_ptr,info_ptr,(png_byte**)row_pointers);
png_write_png(png_ptr,info_ptr,PNG_TRANSFORM_IDENTITY,0);
delete[] row_pointers;
png_destroy_write_struct(&png_ptr,&info_ptr);
fclose(file);
}