Lines Matching refs:info
3111 void lodepng_color_mode_init(LodePNGColorMode * info) in lodepng_color_mode_init() argument
3113 info->key_defined = 0; in lodepng_color_mode_init()
3114 info->key_r = info->key_g = info->key_b = 0; in lodepng_color_mode_init()
3115 info->colortype = LCT_RGBA; in lodepng_color_mode_init()
3116 info->bitdepth = 8; in lodepng_color_mode_init()
3117 info->palette = 0; in lodepng_color_mode_init()
3118 info->palettesize = 0; in lodepng_color_mode_init()
3122 static void lodepng_color_mode_alloc_palette(LodePNGColorMode * info) in lodepng_color_mode_alloc_palette() argument
3127 if(!info->palette) info->palette = (unsigned char *)lodepng_malloc(1024); in lodepng_color_mode_alloc_palette()
3128 if(!info->palette) return; /*alloc fail*/ in lodepng_color_mode_alloc_palette()
3133 info->palette[i * 4 + 0] = 0; in lodepng_color_mode_alloc_palette()
3134 info->palette[i * 4 + 1] = 0; in lodepng_color_mode_alloc_palette()
3135 info->palette[i * 4 + 2] = 0; in lodepng_color_mode_alloc_palette()
3136 info->palette[i * 4 + 3] = 255; in lodepng_color_mode_alloc_palette()
3140 void lodepng_color_mode_cleanup(LodePNGColorMode * info) in lodepng_color_mode_cleanup() argument
3142 lodepng_palette_clear(info); in lodepng_color_mode_cleanup()
3184 void lodepng_palette_clear(LodePNGColorMode * info) in lodepng_palette_clear() argument
3186 if(info->palette) lodepng_free(info->palette); in lodepng_palette_clear()
3187 info->palette = 0; in lodepng_palette_clear()
3188 info->palettesize = 0; in lodepng_palette_clear()
3191 unsigned lodepng_palette_add(LodePNGColorMode * info, in lodepng_palette_add() argument
3194 if(!info->palette) { /*allocate palette if empty*/ in lodepng_palette_add()
3195 lodepng_color_mode_alloc_palette(info); in lodepng_palette_add()
3196 if(!info->palette) return 83; /*alloc fail*/ in lodepng_palette_add()
3198 if(info->palettesize >= 256) { in lodepng_palette_add()
3201 info->palette[4 * info->palettesize + 0] = r; in lodepng_palette_add()
3202 info->palette[4 * info->palettesize + 1] = g; in lodepng_palette_add()
3203 info->palette[4 * info->palettesize + 2] = b; in lodepng_palette_add()
3204 info->palette[4 * info->palettesize + 3] = a; in lodepng_palette_add()
3205 ++info->palettesize; in lodepng_palette_add()
3210 unsigned lodepng_get_bpp(const LodePNGColorMode * info) in lodepng_get_bpp() argument
3212 return lodepng_get_bpp_lct(info->colortype, info->bitdepth); in lodepng_get_bpp()
3215 unsigned lodepng_get_channels(const LodePNGColorMode * info) in lodepng_get_channels() argument
3217 return getNumColorChannels(info->colortype); in lodepng_get_channels()
3220 unsigned lodepng_is_greyscale_type(const LodePNGColorMode * info) in lodepng_is_greyscale_type() argument
3222 return info->colortype == LCT_GREY || info->colortype == LCT_GREY_ALPHA; in lodepng_is_greyscale_type()
3225 unsigned lodepng_is_alpha_type(const LodePNGColorMode * info) in lodepng_is_alpha_type() argument
3227 return (info->colortype & 4) != 0; /*4 or 6*/ in lodepng_is_alpha_type()
3230 unsigned lodepng_is_palette_type(const LodePNGColorMode * info) in lodepng_is_palette_type() argument
3232 return info->colortype == LCT_PALETTE; in lodepng_is_palette_type()
3235 unsigned lodepng_has_palette_alpha(const LodePNGColorMode * info) in lodepng_has_palette_alpha() argument
3238 for(i = 0; i != info->palettesize; ++i) { in lodepng_has_palette_alpha()
3239 if(info->palette[i * 4 + 3] < 255) return 1; in lodepng_has_palette_alpha()
3244 unsigned lodepng_can_have_alpha(const LodePNGColorMode * info) in lodepng_can_have_alpha() argument
3246 return info->key_defined in lodepng_can_have_alpha()
3247 || lodepng_is_alpha_type(info) in lodepng_can_have_alpha()
3248 || lodepng_has_palette_alpha(info); in lodepng_can_have_alpha()
3310 static void LodePNGUnknownChunks_init(LodePNGInfo * info) in LodePNGUnknownChunks_init() argument
3313 for(i = 0; i != 3; ++i) info->unknown_chunks_data[i] = 0; in LodePNGUnknownChunks_init()
3314 for(i = 0; i != 3; ++i) info->unknown_chunks_size[i] = 0; in LodePNGUnknownChunks_init()
3317 static void LodePNGUnknownChunks_cleanup(LodePNGInfo * info) in LodePNGUnknownChunks_cleanup() argument
3320 for(i = 0; i != 3; ++i) lodepng_free(info->unknown_chunks_data[i]); in LodePNGUnknownChunks_cleanup()
3344 static void LodePNGText_init(LodePNGInfo * info) in LodePNGText_init() argument
3346 info->text_num = 0; in LodePNGText_init()
3347 info->text_keys = NULL; in LodePNGText_init()
3348 info->text_strings = NULL; in LodePNGText_init()
3351 static void LodePNGText_cleanup(LodePNGInfo * info) in LodePNGText_cleanup() argument
3354 for(i = 0; i != info->text_num; ++i) { in LodePNGText_cleanup()
3355 string_cleanup(&info->text_keys[i]); in LodePNGText_cleanup()
3356 string_cleanup(&info->text_strings[i]); in LodePNGText_cleanup()
3358 lodepng_free(info->text_keys); in LodePNGText_cleanup()
3359 lodepng_free(info->text_strings); in LodePNGText_cleanup()
3374 static unsigned lodepng_add_text_sized(LodePNGInfo * info, const char * key, const char * str, size… in lodepng_add_text_sized() argument
3376 …char ** new_keys = (char **)(lodepng_realloc(info->text_keys, sizeof(char *) * (info->text_num + 1… in lodepng_add_text_sized()
3377 …char ** new_strings = (char **)(lodepng_realloc(info->text_strings, sizeof(char *) * (info->text_n… in lodepng_add_text_sized()
3379 if(new_keys) info->text_keys = new_keys; in lodepng_add_text_sized()
3380 if(new_strings) info->text_strings = new_strings; in lodepng_add_text_sized()
3384 ++info->text_num; in lodepng_add_text_sized()
3385 info->text_keys[info->text_num - 1] = alloc_string(key); in lodepng_add_text_sized()
3386 info->text_strings[info->text_num - 1] = alloc_string_sized(str, size); in lodepng_add_text_sized()
3387 …if(!info->text_keys[info->text_num - 1] || !info->text_strings[info->text_num - 1]) return 83; /*a… in lodepng_add_text_sized()
3392 unsigned lodepng_add_text(LodePNGInfo * info, const char * key, const char * str) in lodepng_add_text() argument
3394 return lodepng_add_text_sized(info, key, str, lodepng_strlen(str)); in lodepng_add_text()
3397 void lodepng_clear_text(LodePNGInfo * info) in lodepng_clear_text() argument
3399 LodePNGText_cleanup(info); in lodepng_clear_text()
3404 static void LodePNGIText_init(LodePNGInfo * info) in LodePNGIText_init() argument
3406 info->itext_num = 0; in LodePNGIText_init()
3407 info->itext_keys = NULL; in LodePNGIText_init()
3408 info->itext_langtags = NULL; in LodePNGIText_init()
3409 info->itext_transkeys = NULL; in LodePNGIText_init()
3410 info->itext_strings = NULL; in LodePNGIText_init()
3413 static void LodePNGIText_cleanup(LodePNGInfo * info) in LodePNGIText_cleanup() argument
3416 for(i = 0; i != info->itext_num; ++i) { in LodePNGIText_cleanup()
3417 string_cleanup(&info->itext_keys[i]); in LodePNGIText_cleanup()
3418 string_cleanup(&info->itext_langtags[i]); in LodePNGIText_cleanup()
3419 string_cleanup(&info->itext_transkeys[i]); in LodePNGIText_cleanup()
3420 string_cleanup(&info->itext_strings[i]); in LodePNGIText_cleanup()
3422 lodepng_free(info->itext_keys); in LodePNGIText_cleanup()
3423 lodepng_free(info->itext_langtags); in LodePNGIText_cleanup()
3424 lodepng_free(info->itext_transkeys); in LodePNGIText_cleanup()
3425 lodepng_free(info->itext_strings); in LodePNGIText_cleanup()
3443 void lodepng_clear_itext(LodePNGInfo * info) in lodepng_clear_itext() argument
3445 LodePNGIText_cleanup(info); in lodepng_clear_itext()
3448 static unsigned lodepng_add_itext_sized(LodePNGInfo * info, const char * key, const char * langtag, in lodepng_add_itext_sized() argument
3451 …char ** new_keys = (char **)(lodepng_realloc(info->itext_keys, sizeof(char *) * (info->itext_num +… in lodepng_add_itext_sized()
3452 …char ** new_langtags = (char **)(lodepng_realloc(info->itext_langtags, sizeof(char *) * (info->ite… in lodepng_add_itext_sized()
3453 …char ** new_transkeys = (char **)(lodepng_realloc(info->itext_transkeys, sizeof(char *) * (info->i… in lodepng_add_itext_sized()
3454 …char ** new_strings = (char **)(lodepng_realloc(info->itext_strings, sizeof(char *) * (info->itext… in lodepng_add_itext_sized()
3456 if(new_keys) info->itext_keys = new_keys; in lodepng_add_itext_sized()
3457 if(new_langtags) info->itext_langtags = new_langtags; in lodepng_add_itext_sized()
3458 if(new_transkeys) info->itext_transkeys = new_transkeys; in lodepng_add_itext_sized()
3459 if(new_strings) info->itext_strings = new_strings; in lodepng_add_itext_sized()
3463 ++info->itext_num; in lodepng_add_itext_sized()
3465 info->itext_keys[info->itext_num - 1] = alloc_string(key); in lodepng_add_itext_sized()
3466 info->itext_langtags[info->itext_num - 1] = alloc_string(langtag); in lodepng_add_itext_sized()
3467 info->itext_transkeys[info->itext_num - 1] = alloc_string(transkey); in lodepng_add_itext_sized()
3468 info->itext_strings[info->itext_num - 1] = alloc_string_sized(str, size); in lodepng_add_itext_sized()
3473 unsigned lodepng_add_itext(LodePNGInfo * info, const char * key, const char * langtag, in lodepng_add_itext() argument
3476 return lodepng_add_itext_sized(info, key, langtag, transkey, str, lodepng_strlen(str)); in lodepng_add_itext()
3480 static unsigned lodepng_assign_icc(LodePNGInfo * info, const char * name, const unsigned char * pro… in lodepng_assign_icc() argument
3485 info->iccp_name = alloc_string(name); in lodepng_assign_icc()
3486 info->iccp_profile = (unsigned char *)lodepng_malloc(profile_size); in lodepng_assign_icc()
3488 if(!info->iccp_name || !info->iccp_profile) return 83; /*alloc fail*/ in lodepng_assign_icc()
3490 lodepng_memcpy(info->iccp_profile, profile, profile_size); in lodepng_assign_icc()
3491 info->iccp_profile_size = profile_size; in lodepng_assign_icc()
3496 unsigned lodepng_set_icc(LodePNGInfo * info, const char * name, const unsigned char * profile, unsi… in lodepng_set_icc() argument
3498 if(info->iccp_name) lodepng_clear_icc(info); in lodepng_set_icc()
3499 info->iccp_defined = 1; in lodepng_set_icc()
3501 return lodepng_assign_icc(info, name, profile, profile_size); in lodepng_set_icc()
3504 void lodepng_clear_icc(LodePNGInfo * info) in lodepng_clear_icc() argument
3506 string_cleanup(&info->iccp_name); in lodepng_clear_icc()
3507 lodepng_free(info->iccp_profile); in lodepng_clear_icc()
3508 info->iccp_profile = NULL; in lodepng_clear_icc()
3509 info->iccp_profile_size = 0; in lodepng_clear_icc()
3510 info->iccp_defined = 0; in lodepng_clear_icc()
3514 void lodepng_info_init(LodePNGInfo * info) in lodepng_info_init() argument
3516 lodepng_color_mode_init(&info->color); in lodepng_info_init()
3517 info->interlace_method = 0; in lodepng_info_init()
3518 info->compression_method = 0; in lodepng_info_init()
3519 info->filter_method = 0; in lodepng_info_init()
3521 info->background_defined = 0; in lodepng_info_init()
3522 info->background_r = info->background_g = info->background_b = 0; in lodepng_info_init()
3524 LodePNGText_init(info); in lodepng_info_init()
3525 LodePNGIText_init(info); in lodepng_info_init()
3527 info->time_defined = 0; in lodepng_info_init()
3528 info->phys_defined = 0; in lodepng_info_init()
3530 info->gama_defined = 0; in lodepng_info_init()
3531 info->chrm_defined = 0; in lodepng_info_init()
3532 info->srgb_defined = 0; in lodepng_info_init()
3533 info->iccp_defined = 0; in lodepng_info_init()
3534 info->iccp_name = NULL; in lodepng_info_init()
3535 info->iccp_profile = NULL; in lodepng_info_init()
3537 info->sbit_defined = 0; in lodepng_info_init()
3538 info->sbit_r = info->sbit_g = info->sbit_b = info->sbit_a = 0; in lodepng_info_init()
3540 LodePNGUnknownChunks_init(info); in lodepng_info_init()
3544 void lodepng_info_cleanup(LodePNGInfo * info) in lodepng_info_cleanup() argument
3546 lodepng_color_mode_cleanup(&info->color); in lodepng_info_cleanup()
3548 LodePNGText_cleanup(info); in lodepng_info_cleanup()
3549 LodePNGIText_cleanup(info); in lodepng_info_cleanup()
3551 lodepng_clear_icc(info); in lodepng_info_cleanup()
3553 LodePNGUnknownChunks_cleanup(info); in lodepng_info_cleanup()
4617 LodePNGInfo * info = &state->info_png; in lodepng_inspect() local
4627 lodepng_info_cleanup(info); in lodepng_inspect()
4628 lodepng_info_init(info); in lodepng_inspect()
4647 info->color.bitdepth = in[24]; in lodepng_inspect()
4648 info->color.colortype = (LodePNGColorType)in[25]; in lodepng_inspect()
4649 info->compression_method = in[26]; in lodepng_inspect()
4650 info->filter_method = in[27]; in lodepng_inspect()
4651 info->interlace_method = in[28]; in lodepng_inspect()
4658 state->error = checkColorValidity(info->color.colortype, info->color.bitdepth); in lodepng_inspect()
4661 if(info->compression_method != 0) CERROR_RETURN_ERROR(state->error, 32); in lodepng_inspect()
4663 if(info->filter_method != 0) CERROR_RETURN_ERROR(state->error, 33); in lodepng_inspect()
4665 if(info->interlace_method > 1) CERROR_RETURN_ERROR(state->error, 34); in lodepng_inspect()
5156 static unsigned readChunk_bKGD(LodePNGInfo * info, const unsigned char * data, size_t chunkLength) in readChunk_bKGD() argument
5158 if(info->color.colortype == LCT_PALETTE) { in readChunk_bKGD()
5163 if(data[0] >= info->color.palettesize) return 103; in readChunk_bKGD()
5165 info->background_defined = 1; in readChunk_bKGD()
5166 info->background_r = info->background_g = info->background_b = data[0]; in readChunk_bKGD()
5168 else if(info->color.colortype == LCT_GREY || info->color.colortype == LCT_GREY_ALPHA) { in readChunk_bKGD()
5173 info->background_defined = 1; in readChunk_bKGD()
5174 info->background_r = info->background_g = info->background_b = 256u * data[0] + data[1]; in readChunk_bKGD()
5176 else if(info->color.colortype == LCT_RGB || info->color.colortype == LCT_RGBA) { in readChunk_bKGD()
5181 info->background_defined = 1; in readChunk_bKGD()
5182 info->background_r = 256u * data[0] + data[1]; in readChunk_bKGD()
5183 info->background_g = 256u * data[2] + data[3]; in readChunk_bKGD()
5184 info->background_b = 256u * data[4] + data[5]; in readChunk_bKGD()
5191 static unsigned readChunk_tEXt(LodePNGInfo * info, const unsigned char * data, size_t chunkLength) in readChunk_tEXt() argument
5220 error = lodepng_add_text(info, key, str); in readChunk_tEXt()
5232 static unsigned readChunk_zTXt(LodePNGInfo * info, const LodePNGDecoderSettings * decoder, in readChunk_zTXt() argument
5269 error = lodepng_add_text_sized(info, key, (char *)str, size); in readChunk_zTXt()
5280 static unsigned readChunk_iTXt(LodePNGInfo * info, const LodePNGDecoderSettings * decoder, in readChunk_iTXt() argument
5351 … if(!error) error = lodepng_add_itext_sized(info, key, langtag, transkey, (char *)str, size); in readChunk_iTXt()
5355 … error = lodepng_add_itext_sized(info, key, langtag, transkey, (char *)(data + begin), length); in readChunk_iTXt()
5368 static unsigned readChunk_tIME(LodePNGInfo * info, const unsigned char * data, size_t chunkLength) in readChunk_tIME() argument
5372 info->time_defined = 1; in readChunk_tIME()
5373 info->time.year = 256u * data[0] + data[1]; in readChunk_tIME()
5374 info->time.month = data[2]; in readChunk_tIME()
5375 info->time.day = data[3]; in readChunk_tIME()
5376 info->time.hour = data[4]; in readChunk_tIME()
5377 info->time.minute = data[5]; in readChunk_tIME()
5378 info->time.second = data[6]; in readChunk_tIME()
5383 static unsigned readChunk_pHYs(LodePNGInfo * info, const unsigned char * data, size_t chunkLength) in readChunk_pHYs() argument
5387 info->phys_defined = 1; in readChunk_pHYs()
5388 info->phys_x = 16777216u * data[0] + 65536u * data[1] + 256u * data[2] + data[3]; in readChunk_pHYs()
5389 info->phys_y = 16777216u * data[4] + 65536u * data[5] + 256u * data[6] + data[7]; in readChunk_pHYs()
5390 info->phys_unit = data[8]; in readChunk_pHYs()
5395 static unsigned readChunk_gAMA(LodePNGInfo * info, const unsigned char * data, size_t chunkLength) in readChunk_gAMA() argument
5399 info->gama_defined = 1; in readChunk_gAMA()
5400 info->gama_gamma = 16777216u * data[0] + 65536u * data[1] + 256u * data[2] + data[3]; in readChunk_gAMA()
5405 static unsigned readChunk_cHRM(LodePNGInfo * info, const unsigned char * data, size_t chunkLength) in readChunk_cHRM() argument
5409 info->chrm_defined = 1; in readChunk_cHRM()
5410 info->chrm_white_x = 16777216u * data[ 0] + 65536u * data[ 1] + 256u * data[ 2] + data[ 3]; in readChunk_cHRM()
5411 info->chrm_white_y = 16777216u * data[ 4] + 65536u * data[ 5] + 256u * data[ 6] + data[ 7]; in readChunk_cHRM()
5412 info->chrm_red_x = 16777216u * data[ 8] + 65536u * data[ 9] + 256u * data[10] + data[11]; in readChunk_cHRM()
5413 info->chrm_red_y = 16777216u * data[12] + 65536u * data[13] + 256u * data[14] + data[15]; in readChunk_cHRM()
5414 info->chrm_green_x = 16777216u * data[16] + 65536u * data[17] + 256u * data[18] + data[19]; in readChunk_cHRM()
5415 info->chrm_green_y = 16777216u * data[20] + 65536u * data[21] + 256u * data[22] + data[23]; in readChunk_cHRM()
5416 info->chrm_blue_x = 16777216u * data[24] + 65536u * data[25] + 256u * data[26] + data[27]; in readChunk_cHRM()
5417 info->chrm_blue_y = 16777216u * data[28] + 65536u * data[29] + 256u * data[30] + data[31]; in readChunk_cHRM()
5422 static unsigned readChunk_sRGB(LodePNGInfo * info, const unsigned char * data, size_t chunkLength) in readChunk_sRGB() argument
5426 info->srgb_defined = 1; in readChunk_sRGB()
5427 info->srgb_intent = data[0]; in readChunk_sRGB()
5432 static unsigned readChunk_iCCP(LodePNGInfo * info, const LodePNGDecoderSettings * decoder, in readChunk_iCCP() argument
5443 info->iccp_defined = 1; in readChunk_iCCP()
5444 if(info->iccp_name) lodepng_clear_icc(info); in readChunk_iCCP()
5450 info->iccp_name = (char *)lodepng_malloc(length + 1); in readChunk_iCCP()
5451 if(!info->iccp_name) return 83; /*alloc fail*/ in readChunk_iCCP()
5453 info->iccp_name[length] = 0; in readChunk_iCCP()
5454 for(i = 0; i != length; ++i) info->iccp_name[i] = (char)data[i]; in readChunk_iCCP()
5463 error = zlib_decompress(&info->iccp_profile, &size, 0, in readChunk_iCCP()
5468 info->iccp_profile_size = (unsigned)size; in readChunk_iCCP()
5469 if(!error && !info->iccp_profile_size) error = 100; /*invalid ICC profile size*/ in readChunk_iCCP()
5474 static unsigned readChunk_sBIT(LodePNGInfo * info, const unsigned char * data, size_t chunkLength) in readChunk_sBIT() argument
5476 unsigned bitdepth = (info->color.colortype == LCT_PALETTE) ? 8 : info->color.bitdepth; in readChunk_sBIT()
5477 if(info->color.colortype == LCT_GREY) { in readChunk_sBIT()
5481 info->sbit_defined = 1; in readChunk_sBIT()
5482 …info->sbit_r = info->sbit_g = info->sbit_b = data[0]; /*setting g and b is not required, but sensi… in readChunk_sBIT()
5484 else if(info->color.colortype == LCT_RGB || info->color.colortype == LCT_PALETTE) { in readChunk_sBIT()
5489 info->sbit_defined = 1; in readChunk_sBIT()
5490 info->sbit_r = data[0]; in readChunk_sBIT()
5491 info->sbit_g = data[1]; in readChunk_sBIT()
5492 info->sbit_b = data[2]; in readChunk_sBIT()
5494 else if(info->color.colortype == LCT_GREY_ALPHA) { in readChunk_sBIT()
5499 info->sbit_defined = 1; in readChunk_sBIT()
5500 …info->sbit_r = info->sbit_g = info->sbit_b = data[0]; /*setting g and b is not required, but sensi… in readChunk_sBIT()
5501 info->sbit_a = data[1]; in readChunk_sBIT()
5503 else if(info->color.colortype == LCT_RGBA) { in readChunk_sBIT()
5508 info->sbit_defined = 1; in readChunk_sBIT()
5509 info->sbit_r = data[0]; in readChunk_sBIT()
5510 info->sbit_g = data[1]; in readChunk_sBIT()
5511 info->sbit_b = data[2]; in readChunk_sBIT()
5512 info->sbit_a = data[3]; in readChunk_sBIT()
5998 static unsigned addChunk_PLTE(ucvector * out, const LodePNGColorMode * info) in addChunk_PLTE() argument
6003 if(info->palettesize == 0 || info->palettesize > 256) { in addChunk_PLTE()
6007 CERROR_TRY_RETURN(lodepng_chunk_init(&chunk, out, info->palettesize * 3, "PLTE")); in addChunk_PLTE()
6009 for(i = 0; i != info->palettesize; ++i) { in addChunk_PLTE()
6011 chunk[j++] = info->palette[i * 4 + 0]; in addChunk_PLTE()
6012 chunk[j++] = info->palette[i * 4 + 1]; in addChunk_PLTE()
6013 chunk[j++] = info->palette[i * 4 + 2]; in addChunk_PLTE()
6020 static unsigned addChunk_tRNS(ucvector * out, const LodePNGColorMode * info) in addChunk_tRNS() argument
6024 if(info->colortype == LCT_PALETTE) { in addChunk_tRNS()
6025 size_t i, amount = info->palettesize; in addChunk_tRNS()
6027 for(i = info->palettesize; i != 0; --i) { in addChunk_tRNS()
6028 if(info->palette[4 * (i - 1) + 3] != 255) break; in addChunk_tRNS()
6034 for(i = 0; i != amount; ++i) chunk[8 + i] = info->palette[4 * i + 3]; in addChunk_tRNS()
6037 else if(info->colortype == LCT_GREY) { in addChunk_tRNS()
6038 if(info->key_defined) { in addChunk_tRNS()
6040 chunk[8] = (unsigned char)(info->key_r >> 8); in addChunk_tRNS()
6041 chunk[9] = (unsigned char)(info->key_r & 255); in addChunk_tRNS()
6044 else if(info->colortype == LCT_RGB) { in addChunk_tRNS()
6045 if(info->key_defined) { in addChunk_tRNS()
6047 chunk[8] = (unsigned char)(info->key_r >> 8); in addChunk_tRNS()
6048 chunk[9] = (unsigned char)(info->key_r & 255); in addChunk_tRNS()
6049 chunk[10] = (unsigned char)(info->key_g >> 8); in addChunk_tRNS()
6050 chunk[11] = (unsigned char)(info->key_g & 255); in addChunk_tRNS()
6051 chunk[12] = (unsigned char)(info->key_b >> 8); in addChunk_tRNS()
6052 chunk[13] = (unsigned char)(info->key_b & 255); in addChunk_tRNS()
6171 static unsigned addChunk_bKGD(ucvector * out, const LodePNGInfo * info) in addChunk_bKGD() argument
6174 if(info->color.colortype == LCT_GREY || info->color.colortype == LCT_GREY_ALPHA) { in addChunk_bKGD()
6176 chunk[8] = (unsigned char)(info->background_r >> 8); in addChunk_bKGD()
6177 chunk[9] = (unsigned char)(info->background_r & 255); in addChunk_bKGD()
6179 else if(info->color.colortype == LCT_RGB || info->color.colortype == LCT_RGBA) { in addChunk_bKGD()
6181 chunk[8] = (unsigned char)(info->background_r >> 8); in addChunk_bKGD()
6182 chunk[9] = (unsigned char)(info->background_r & 255); in addChunk_bKGD()
6183 chunk[10] = (unsigned char)(info->background_g >> 8); in addChunk_bKGD()
6184 chunk[11] = (unsigned char)(info->background_g & 255); in addChunk_bKGD()
6185 chunk[12] = (unsigned char)(info->background_b >> 8); in addChunk_bKGD()
6186 chunk[13] = (unsigned char)(info->background_b & 255); in addChunk_bKGD()
6188 else if(info->color.colortype == LCT_PALETTE) { in addChunk_bKGD()
6190 chunk[8] = (unsigned char)(info->background_r & 255); /*palette index*/ in addChunk_bKGD()
6211 static unsigned addChunk_pHYs(ucvector * out, const LodePNGInfo * info) in addChunk_pHYs() argument
6215 lodepng_set32bitInt(chunk + 8, info->phys_x); in addChunk_pHYs()
6216 lodepng_set32bitInt(chunk + 12, info->phys_y); in addChunk_pHYs()
6217 chunk[16] = info->phys_unit; in addChunk_pHYs()
6222 static unsigned addChunk_gAMA(ucvector * out, const LodePNGInfo * info) in addChunk_gAMA() argument
6226 lodepng_set32bitInt(chunk + 8, info->gama_gamma); in addChunk_gAMA()
6231 static unsigned addChunk_cHRM(ucvector * out, const LodePNGInfo * info) in addChunk_cHRM() argument
6235 lodepng_set32bitInt(chunk + 8, info->chrm_white_x); in addChunk_cHRM()
6236 lodepng_set32bitInt(chunk + 12, info->chrm_white_y); in addChunk_cHRM()
6237 lodepng_set32bitInt(chunk + 16, info->chrm_red_x); in addChunk_cHRM()
6238 lodepng_set32bitInt(chunk + 20, info->chrm_red_y); in addChunk_cHRM()
6239 lodepng_set32bitInt(chunk + 24, info->chrm_green_x); in addChunk_cHRM()
6240 lodepng_set32bitInt(chunk + 28, info->chrm_green_y); in addChunk_cHRM()
6241 lodepng_set32bitInt(chunk + 32, info->chrm_blue_x); in addChunk_cHRM()
6242 lodepng_set32bitInt(chunk + 36, info->chrm_blue_y); in addChunk_cHRM()
6247 static unsigned addChunk_sRGB(ucvector * out, const LodePNGInfo * info) in addChunk_sRGB() argument
6249 unsigned char data = info->srgb_intent; in addChunk_sRGB()
6253 static unsigned addChunk_iCCP(ucvector * out, const LodePNGInfo * info, LodePNGCompressSettings * z… in addChunk_iCCP() argument
6259 size_t keysize = lodepng_strlen(info->iccp_name); in addChunk_iCCP()
6263 info->iccp_profile, info->iccp_profile_size, zlibsettings); in addChunk_iCCP()
6269 lodepng_memcpy(chunk + 8, info->iccp_name, keysize); in addChunk_iCCP()
6280 static unsigned addChunk_sBIT(ucvector * out, const LodePNGInfo * info) in addChunk_sBIT() argument
6282 unsigned bitdepth = (info->color.colortype == LCT_PALETTE) ? 8 : info->color.bitdepth; in addChunk_sBIT()
6284 if(info->color.colortype == LCT_GREY) { in addChunk_sBIT()
6285 if(info->sbit_r == 0 || info->sbit_r > bitdepth) return 115; in addChunk_sBIT()
6287 chunk[8] = info->sbit_r; in addChunk_sBIT()
6289 else if(info->color.colortype == LCT_RGB || info->color.colortype == LCT_PALETTE) { in addChunk_sBIT()
6290 if(info->sbit_r == 0 || info->sbit_g == 0 || info->sbit_b == 0) return 115; in addChunk_sBIT()
6291 … if(info->sbit_r > bitdepth || info->sbit_g > bitdepth || info->sbit_b > bitdepth) return 115; in addChunk_sBIT()
6293 chunk[8] = info->sbit_r; in addChunk_sBIT()
6294 chunk[9] = info->sbit_g; in addChunk_sBIT()
6295 chunk[10] = info->sbit_b; in addChunk_sBIT()
6297 else if(info->color.colortype == LCT_GREY_ALPHA) { in addChunk_sBIT()
6298 if(info->sbit_r == 0 || info->sbit_a == 0) return 115; in addChunk_sBIT()
6299 if(info->sbit_r > bitdepth || info->sbit_a > bitdepth) return 115; in addChunk_sBIT()
6301 chunk[8] = info->sbit_r; in addChunk_sBIT()
6302 chunk[9] = info->sbit_a; in addChunk_sBIT()
6304 else if(info->color.colortype == LCT_RGBA) { in addChunk_sBIT()
6305 if(info->sbit_r == 0 || info->sbit_g == 0 || info->sbit_b == 0 || info->sbit_a == 0 || in addChunk_sBIT()
6306 info->sbit_r > bitdepth || info->sbit_g > bitdepth || in addChunk_sBIT()
6307 info->sbit_b > bitdepth || info->sbit_a > bitdepth) { in addChunk_sBIT()
6311 chunk[8] = info->sbit_r; in addChunk_sBIT()
6312 chunk[9] = info->sbit_g; in addChunk_sBIT()
6313 chunk[10] = info->sbit_b; in addChunk_sBIT()
6314 chunk[11] = info->sbit_a; in addChunk_sBIT()
6801 LodePNGInfo info; in lodepng_encode() local
6805 lodepng_info_init(&info); in lodepng_encode()
6837 lodepng_info_copy(&info, &state->info_png); in lodepng_encode()
6883 if(info.color.colortype == LCT_PALETTE && in lodepng_encode()
6891 if(info.color.colortype == LCT_RGB && in lodepng_encode()
6896 if(info.color.colortype == LCT_RGBA && auto_color.colortype == LCT_PALETTE && in lodepng_encode()
6901 …if((info.color.colortype == LCT_RGB || info.color.colortype == LCT_RGBA) && info.color.bitdepth ==… in lodepng_encode()
6902 auto_color.colortype == info.color.colortype && auto_color.bitdepth == 8 && in lodepng_encode()
6914 if(info.color.colortype != LCT_PALETTE && auto_color.colortype != LCT_PALETTE && in lodepng_encode()
6921 if(info.color.colortype != LCT_GREY && info.color.colortype != LCT_GREY_ALPHA && in lodepng_encode()
6929 lodepng_color_mode_copy(&info.color, &auto_color); in lodepng_encode()
6933 if(lodepng_convert_rgb(&info.background_r, &info.background_g, &info.background_b, in lodepng_encode()
6934 …info_png->background_r, info_png->background_g, info_png->background_b, &info.color, &info_png->co… in lodepng_encode()
6946 … unsigned gray_png = info.color.colortype == LCT_GREY || info.color.colortype == LCT_GREY_ALPHA; in lodepng_encode()
6959 if(!lodepng_color_mode_equal(&state->info_raw, &info.color)) { in lodepng_encode()
6961 size_t size = ((size_t)w * (size_t)h * (size_t)lodepng_get_bpp(&info.color) + 7u) / 8u; in lodepng_encode()
6966 state->error = lodepng_convert(converted, image, &info.color, &state->info_raw, w, h); in lodepng_encode()
6969 … state->error = preProcessScanlines(&data, &datasize, converted, w, h, &info, &state->encoder); in lodepng_encode()
6975 state->error = preProcessScanlines(&data, &datasize, image, w, h, &info, &state->encoder); in lodepng_encode()
6987 …state->error = addChunk_IHDR(&outv, w, h, info.color.colortype, info.color.bitdepth, info.interlac… in lodepng_encode()
6991 if(info.unknown_chunks_data[0]) { in lodepng_encode()
6992 … state->error = addUnknownChunks(&outv, info.unknown_chunks_data[0], info.unknown_chunks_size[0]); in lodepng_encode()
6996 if(info.iccp_defined) { in lodepng_encode()
6997 state->error = addChunk_iCCP(&outv, &info, &state->encoder.zlibsettings); in lodepng_encode()
7000 if(info.srgb_defined) { in lodepng_encode()
7001 state->error = addChunk_sRGB(&outv, &info); in lodepng_encode()
7004 if(info.gama_defined) { in lodepng_encode()
7005 state->error = addChunk_gAMA(&outv, &info); in lodepng_encode()
7008 if(info.chrm_defined) { in lodepng_encode()
7009 state->error = addChunk_cHRM(&outv, &info); in lodepng_encode()
7013 state->error = addChunk_sBIT(&outv, &info); in lodepng_encode()
7018 if(info.color.colortype == LCT_PALETTE) { in lodepng_encode()
7019 state->error = addChunk_PLTE(&outv, &info.color); in lodepng_encode()
7022 …if(state->encoder.force_palette && (info.color.colortype == LCT_RGB || info.color.colortype == LCT… in lodepng_encode()
7024 state->error = addChunk_PLTE(&outv, &info.color); in lodepng_encode()
7028 state->error = addChunk_tRNS(&outv, &info.color); in lodepng_encode()
7032 if(info.background_defined) { in lodepng_encode()
7033 state->error = addChunk_bKGD(&outv, &info); in lodepng_encode()
7037 if(info.phys_defined) { in lodepng_encode()
7038 state->error = addChunk_pHYs(&outv, &info); in lodepng_encode()
7043 if(info.unknown_chunks_data[1]) { in lodepng_encode()
7044 … state->error = addUnknownChunks(&outv, info.unknown_chunks_data[1], info.unknown_chunks_size[1]); in lodepng_encode()
7053 if(info.time_defined) { in lodepng_encode()
7054 state->error = addChunk_tIME(&outv, &info.time); in lodepng_encode()
7058 for(i = 0; i != info.text_num; ++i) { in lodepng_encode()
7059 if(lodepng_strlen(info.text_keys[i]) > 79) { in lodepng_encode()
7063 if(lodepng_strlen(info.text_keys[i]) < 1) { in lodepng_encode()
7068 …state->error = addChunk_zTXt(&outv, info.text_keys[i], info.text_strings[i], &state->encoder.zlibs… in lodepng_encode()
7072 state->error = addChunk_tEXt(&outv, info.text_keys[i], info.text_strings[i]); in lodepng_encode()
7079 for(i = 0; i != info.text_num; ++i) { in lodepng_encode()
7080 const char * k = info.text_keys[i]; in lodepng_encode()
7094 for(i = 0; i != info.itext_num; ++i) { in lodepng_encode()
7095 if(lodepng_strlen(info.itext_keys[i]) > 79) { in lodepng_encode()
7099 if(lodepng_strlen(info.itext_keys[i]) < 1) { in lodepng_encode()
7105 … info.itext_keys[i], info.itext_langtags[i], info.itext_transkeys[i], info.itext_strings[i], in lodepng_encode()
7111 if(info.unknown_chunks_data[2]) { in lodepng_encode()
7112 … state->error = addUnknownChunks(&outv, info.unknown_chunks_data[2], info.unknown_chunks_size[2]); in lodepng_encode()
7121 lodepng_info_cleanup(&info); in lodepng_encode()