static void (*qpng_set_compression_level) (void*, int);
static void (*qpng_set_filter) (void*, int, int);
static void (*qpng_set_expand) (void*);
-static void (*qpng_set_gray_1_2_4_to_8) (void*);
static void (*qpng_set_palette_to_rgb) (void*);
static void (*qpng_set_tRNS_to_alpha) (void*);
static void (*qpng_set_gray_to_rgb) (void*);
{"png_set_compression_level", (void **) &qpng_set_compression_level},
{"png_set_filter", (void **) &qpng_set_filter},
{"png_set_expand", (void **) &qpng_set_expand},
- {"png_set_gray_1_2_4_to_8", (void **) &qpng_set_gray_1_2_4_to_8},
{"png_set_palette_to_rgb", (void **) &qpng_set_palette_to_rgb},
{"png_set_tRNS_to_alpha", (void **) &qpng_set_tRNS_to_alpha},
{"png_set_gray_to_rgb", (void **) &qpng_set_gray_to_rgb},
if (my_png.ColorType == PNG_COLOR_TYPE_PALETTE)
qpng_set_palette_to_rgb(png);
if (my_png.ColorType == PNG_COLOR_TYPE_GRAY || my_png.ColorType == PNG_COLOR_TYPE_GRAY_ALPHA)
- {
qpng_set_gray_to_rgb(png);
- if (my_png.BitDepth < 8)
- qpng_set_gray_1_2_4_to_8(png);
- }
-
if (qpng_get_valid(png, pnginfo, PNG_INFO_tRNS))
qpng_set_tRNS_to_alpha(png);
if (my_png.BitDepth == 8 && !(my_png.ColorType & PNG_COLOR_MASK_ALPHA))
Save a preflipped PNG image to a file
====================
*/
-qboolean PNG_SaveImage_preflipped (const char *filename, int width, int height, unsigned char *data)
+qboolean PNG_SaveImage_preflipped (const char *filename, int width, int height, qboolean has_alpha, unsigned char *data)
{
unsigned int offset, linesize;
qfile_t* file = NULL;
//qpng_set_compression_level(png, Z_BEST_COMPRESSION);
qpng_set_compression_level(png, Z_BEST_SPEED);
- qpng_set_IHDR(png, pnginfo, width, height, 8, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_ADAM7, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
- //qpng_set_IHDR(png, pnginfo, width, height, 8, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
+ qpng_set_IHDR(png, pnginfo, width, height, 8, has_alpha ? PNG_COLOR_TYPE_RGB_ALPHA : PNG_COLOR_TYPE_RGB, PNG_INTERLACE_ADAM7, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
qpng_set_filter(png, 0, PNG_NO_FILTERS);
qpng_write_info(png, pnginfo);
qpng_set_packing(png);
passes = qpng_set_interlace_handling(png);
- linesize = width * 3;
+ linesize = width * (has_alpha ? 4 : 3);
offset = linesize * (height - 1);
for(i = 0; i < passes; ++i)
for(j = 0; j < height; ++j)