Lines Matching full:stats
4212 void lodepng_color_stats_init(LodePNGColorStats * stats) in lodepng_color_stats_init() argument
4214 /*stats*/ in lodepng_color_stats_init()
4215 stats->colored = 0; in lodepng_color_stats_init()
4216 stats->key = 0; in lodepng_color_stats_init()
4217 stats->key_r = stats->key_g = stats->key_b = 0; in lodepng_color_stats_init()
4218 stats->alpha = 0; in lodepng_color_stats_init()
4219 stats->numcolors = 0; in lodepng_color_stats_init()
4220 stats->bits = 1; in lodepng_color_stats_init()
4221 stats->numpixels = 0; in lodepng_color_stats_init()
4223 stats->allow_palette = 1; in lodepng_color_stats_init()
4224 stats->allow_greyscale = 1; in lodepng_color_stats_init()
4248 /*stats must already have been inited. */
4249 unsigned lodepng_compute_color_stats(LodePNGColorStats * stats, in lodepng_compute_color_stats() argument
4263 unsigned bits_done = (stats->bits == 1 && bpp == 1) ? 1 : 0; in lodepng_compute_color_stats()
4266 if(bpp <= 8) maxnumcolors = LODEPNG_MIN(257, stats->numcolors + (1u << bpp)); in lodepng_compute_color_stats()
4268 stats->numpixels += numpixels; in lodepng_compute_color_stats()
4271 if(!stats->allow_palette) numcolors_done = 1; in lodepng_compute_color_stats()
4275 /*If the stats was already filled in from previous data, fill its palette in tree in lodepng_compute_color_stats()
4277 if(stats->alpha) alpha_done = 1; in lodepng_compute_color_stats()
4278 if(stats->colored) colored_done = 1; in lodepng_compute_color_stats()
4279 if(stats->bits == 16) numcolors_done = 1; in lodepng_compute_color_stats()
4280 if(stats->bits >= bpp) bits_done = 1; in lodepng_compute_color_stats()
4281 if(stats->numcolors >= maxnumcolors) numcolors_done = 1; in lodepng_compute_color_stats()
4284 for(i = 0; i < stats->numcolors; i++) { in lodepng_compute_color_stats()
4285 const unsigned char * color = &stats->palette[i * 4]; in lodepng_compute_color_stats()
4298 stats->bits = 16; in lodepng_compute_color_stats()
4314 stats->colored = 1; in lodepng_compute_color_stats()
4319 unsigned matchkey = (r == stats->key_r && g == stats->key_g && b == stats->key_b); in lodepng_compute_color_stats()
4320 if(a != 65535 && (a != 0 || (stats->key && !matchkey))) { in lodepng_compute_color_stats()
4321 stats->alpha = 1; in lodepng_compute_color_stats()
4322 stats->key = 0; in lodepng_compute_color_stats()
4325 else if(a == 0 && !stats->alpha && !stats->key) { in lodepng_compute_color_stats()
4326 stats->key = 1; in lodepng_compute_color_stats()
4327 stats->key_r = r; in lodepng_compute_color_stats()
4328 stats->key_g = g; in lodepng_compute_color_stats()
4329 stats->key_b = b; in lodepng_compute_color_stats()
4331 else if(a == 65535 && stats->key && matchkey) { in lodepng_compute_color_stats()
4333 stats->alpha = 1; in lodepng_compute_color_stats()
4334 stats->key = 0; in lodepng_compute_color_stats()
4341 if(stats->key && !stats->alpha) { in lodepng_compute_color_stats()
4344 if(a != 0 && r == stats->key_r && g == stats->key_g && b == stats->key_b) { in lodepng_compute_color_stats()
4346 stats->alpha = 1; in lodepng_compute_color_stats()
4347 stats->key = 0; in lodepng_compute_color_stats()
4358 if(!bits_done && stats->bits < 8) { in lodepng_compute_color_stats()
4361 if(bits > stats->bits) stats->bits = bits; in lodepng_compute_color_stats()
4363 bits_done = (stats->bits >= bpp); in lodepng_compute_color_stats()
4366 stats->colored = 1; in lodepng_compute_color_stats()
4368 … if(stats->bits < 8) stats->bits = 8; /*PNG has no colored modes with less than 8-bit per channel*/ in lodepng_compute_color_stats()
4372 unsigned matchkey = (r == stats->key_r && g == stats->key_g && b == stats->key_b); in lodepng_compute_color_stats()
4373 if(a != 255 && (a != 0 || (stats->key && !matchkey))) { in lodepng_compute_color_stats()
4374 stats->alpha = 1; in lodepng_compute_color_stats()
4375 stats->key = 0; in lodepng_compute_color_stats()
4377 …if(stats->bits < 8) stats->bits = 8; /*PNG has no alphachannel modes with less than 8-bit per chan… in lodepng_compute_color_stats()
4379 else if(a == 0 && !stats->alpha && !stats->key) { in lodepng_compute_color_stats()
4380 stats->key = 1; in lodepng_compute_color_stats()
4381 stats->key_r = r; in lodepng_compute_color_stats()
4382 stats->key_g = g; in lodepng_compute_color_stats()
4383 stats->key_b = b; in lodepng_compute_color_stats()
4385 else if(a == 255 && stats->key && matchkey) { in lodepng_compute_color_stats()
4387 stats->alpha = 1; in lodepng_compute_color_stats()
4388 stats->key = 0; in lodepng_compute_color_stats()
4390 …if(stats->bits < 8) stats->bits = 8; /*PNG has no alphachannel modes with less than 8-bit per chan… in lodepng_compute_color_stats()
4396 error = color_tree_add(&tree, r, g, b, a, stats->numcolors); in lodepng_compute_color_stats()
4398 if(stats->numcolors < 256) { in lodepng_compute_color_stats()
4399 unsigned char * p = stats->palette; in lodepng_compute_color_stats()
4400 unsigned n = stats->numcolors; in lodepng_compute_color_stats()
4406 ++stats->numcolors; in lodepng_compute_color_stats()
4407 numcolors_done = stats->numcolors >= maxnumcolors; in lodepng_compute_color_stats()
4414 if(stats->key && !stats->alpha) { in lodepng_compute_color_stats()
4417 if(a != 0 && r == stats->key_r && g == stats->key_g && b == stats->key_b) { in lodepng_compute_color_stats()
4419 stats->alpha = 1; in lodepng_compute_color_stats()
4420 stats->key = 0; in lodepng_compute_color_stats()
4422 …if(stats->bits < 8) stats->bits = 8; /*PNG has no alphachannel modes with less than 8-bit per chan… in lodepng_compute_color_stats()
4427 /*make the stats's key always 16-bit for consistency - repeat each byte twice*/ in lodepng_compute_color_stats()
4428 stats->key_r += (stats->key_r << 8); in lodepng_compute_color_stats()
4429 stats->key_g += (stats->key_g << 8); in lodepng_compute_color_stats()
4430 stats->key_b += (stats->key_b << 8); in lodepng_compute_color_stats()
4439 /*Adds a single color to the color stats. The stats must already have been inited. The color must b…
4442 static unsigned lodepng_color_stats_add(LodePNGColorStats * stats, in lodepng_color_stats_add() argument
4459 error = lodepng_compute_color_stats(stats, image, 1, 1, &mode); in lodepng_color_stats_add()
4465 /*Computes a minimal PNG color model that can contain all colors as indicated by the stats.
4466 The stats should be computed with lodepng_compute_color_stats.
4467 mode_in is raw color profile of the image the stats were computed on, to copy palette order from wh…
4474 const LodePNGColorStats * stats) in auto_choose_color() argument
4479 size_t numpixels = stats->numpixels; in auto_choose_color()
4482 unsigned alpha = stats->alpha; in auto_choose_color()
4483 unsigned key = stats->key; in auto_choose_color()
4484 unsigned bits = stats->bits; in auto_choose_color()
4494 gray_ok = !stats->colored; in auto_choose_color()
4495 if(!stats->allow_greyscale) gray_ok = 0; in auto_choose_color()
4498 n = stats->numcolors; in auto_choose_color()
4503 if(!stats->allow_palette) palette_ok = 0; in auto_choose_color()
4506 const unsigned char * p = stats->palette; in auto_choose_color()
4508 for(i = 0; i != stats->numcolors; ++i) { in auto_choose_color()
4528 … unsigned mask = (1u << mode_out->bitdepth) - 1u; /*stats always uses 16-bit, mask converts it*/ in auto_choose_color()
4529 mode_out->key_r = stats->key_r & mask; in auto_choose_color()
4530 mode_out->key_g = stats->key_g & mask; in auto_choose_color()
4531 mode_out->key_b = stats->key_b & mask; in auto_choose_color()
6839 LodePNGColorStats stats; in lodepng_encode() local
6841 lodepng_color_stats_init(&stats); in lodepng_encode()
6847 stats.allow_palette = 0; in lodepng_encode()
6852 stats.allow_greyscale = 0; in lodepng_encode()
6855 state->error = lodepng_compute_color_stats(&stats, image, w, h, &state->info_raw); in lodepng_encode()
6864 state->error = lodepng_color_stats_add(&stats, r, g, b, 65535); in lodepng_encode()
6868 state->error = auto_choose_color(&auto_color, &state->info_raw, &stats); in lodepng_encode()