这个用了好多次了,在blog上记录一下吧 int SavePng(const string &png_file_name, byte **data, int width, int height, int bit_depth, png_colorp palette, int palette_len) { png_structp png_ptr; png_infop info_ptr; FILE *png_file = fopen(png_file_name.c_str(), "wb"); assert(png_file); png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); if(png_ptr == NULL) { cerr<<"ERROR:png_create_write_struct/n"; return 0; } info_ptr = png_create_info_struct(png_ptr); if(info_ptr == NULL) { cerr<<"ERROR:png_create_info_struct/n"; png_destroy_write_struct(&png_ptr, NULL); return 0; } png_init_io(png_ptr, png_file); png_set_IHDR(png_ptr, info_ptr, width, height, bit_depth, PNG_COLOR_TYPE_PALETTE, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); png_set_PLTE(png_ptr, info_ptr, palet