2011-12-23 48 views
0

如何在C上使用libpng編寫調色板圖像? 我的代碼:如何在C上使用libpng編寫調色板圖像?

FILE *fp = fopen(file_name, "wb"); 
png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); 
info_ptr = png_create_info_struct(png_ptr); 
png_init_io(png_ptr, fp); 
png_set_strip_alpha(png_ptr); 
png_read_update_info(png_ptr, info_ptr); 

png_set_IHDR(png_ptr, info_ptr, width, height, 
     8, PNG_COLOR_TYPE_PALETTE, PNG_INTERLACE_NONE, 
     PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); 


png_set_PLTE(png_ptr, info_ptr, palette, num_palette); 
png_write_info(png_ptr, info_ptr); 
png_write_image(png_ptr, row_pointers); 
png_write_end(png_ptr, NULL); 

fclose(fp); 

我的結果:

http://rghost.ru/35558350/image.png

+0

不要故意刪除的文件,你的帖子。 – gregoiregentil 2016-02-20 19:01:09

回答

0

下面是一些代碼,我今天寫了這樣做的縮寫:

unsigned paletteSize = ...; 

assert(paletteSize <= PNG_MAX_PALETTE_LENGTH); 

png_color* palette = (png_color*)png_malloc(png_ptr, paletteSize*sizeof(png_color)); 

for (unsigned p = 0; p < paletteSize; p++) 
{ 
    png_color* col = &palette[p]; 
    col->red = ...; 
    col->green = ...; 
    col->blue = ...; 
} 

png_set_PLTE(png_ptr, info_ptr, palette, paletteSize); 

png_write_info(png_ptr, info_ptr); 

// ... png_write_image, png_write_end 

png_destroy_write_struct(&png_ptr, &info_ptr); 

png_free(png_ptr, palette); 
相關問題