static pngquant_error prepare_output_image(liq_result *result, liq_image *input_image, png8_image *output_image) { output_image->width = liq_image_get_width(input_image); output_image->height = liq_image_get_height(input_image); output_image->gamma = liq_get_output_gamma(result); /* ** Step 3.7 [GRR]: allocate memory for the entire indexed image */ output_image->indexed_data = malloc(output_image->height * output_image->width); output_image->row_pointers = malloc(output_image->height * sizeof(output_image->row_pointers[0])); if (!output_image->indexed_data || !output_image->row_pointers) { return OUT_OF_MEMORY_ERROR; } for(size_t row = 0; row < output_image->height; row++) { output_image->row_pointers[row] = output_image->indexed_data + row * output_image->width; } const liq_palette *palette = liq_get_palette(result); // tRNS, etc. output_image->num_palette = palette->count; output_image->num_trans = 0; for(unsigned int i=0; i < palette->count; i++) { if (palette->entries[i].a < 255) { output_image->num_trans = i+1; } } return SUCCESS; }
void prepare_output_image(liq_result *rv, liq_image *image, png8_image *png) { unsigned int i; const liq_palette *palette; png->width = liq_image_get_width(image); png->height = liq_image_get_height(image); png->indexed_data = malloc(png->width * png->height); png->row_pointers = malloc(png->height * sizeof(png->row_pointers[0])); for (i = 0;i < png->height;i++) { png->row_pointers[i] = png->indexed_data + i * png->width; } palette = liq_get_palette(rv); png->num_palette = palette->count; png->num_trans = 0; for (i = 0;i < palette->count;i++) { if (palette->entries[i].a < 255) { png->num_trans = i + 1; } } }