using libpng write file

#include <stdio.h>
#include <stdlib.h>
#include <png.h>

int imgSizeX = 1920;
int imgSizeY = 1080;
int imgNum   = 100;

void writePNG(FILE *file, const char *img) {
    png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
    png_set_compression_level(png_ptr, 9);
    png_infop  info_ptr = png_create_info_struct( png_ptr );
    png_init_io(png_ptr, file);
    
    setjmp( png_jmpbuf(png_ptr) );
    png_set_IHDR(png_ptr, info_ptr, imgSizeX, imgSizeY,
                 8, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE,
                 PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
    png_write_info(png_ptr, info_ptr);
    
    setjmp( png_jmpbuf(png_ptr) );
    png_bytep *row_pointers = new png_bytep[imgSizeY];
    for (int y=0; y < imgSizeY; y++) {
        row_pointers[y] = (png_byte*) &img[y*imgSizeX*3];
    }
    png_write_image(png_ptr, row_pointers);
    
    setjmp( png_jmpbuf(png_ptr) );
    png_write_end(png_ptr, NULL);
    
    delete [] row_pointers;
}

libpng mingw-w64 build static library

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *