]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - image_png.c
png: no longer use png_set_gray_1_2_4_to_8? (N/A in libpng14, and redundant anyway...
[xonotic/darkplaces.git] / image_png.c
index d194931523c751ca2fafe607d056f7d50c6fd655..7799e8acba1994dc7ef9eca90a346148a6c46a6c 100644 (file)
@@ -39,7 +39,6 @@ static void                           (*qpng_read_info)                       (void*, void*);
 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*);
@@ -76,7 +75,6 @@ static dllfunction_t pngfuncs[] =
        {"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},
@@ -339,12 +337,7 @@ unsigned char *PNG_LoadImage_BGRA (const unsigned char *raw, int filesize)
        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))
@@ -443,7 +436,7 @@ PNG_SaveImage_preflipped
 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;
@@ -497,8 +490,7 @@ qboolean PNG_SaveImage_preflipped (const char *filename, int width, int height,
 
        //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);
@@ -506,7 +498,7 @@ qboolean PNG_SaveImage_preflipped (const char *filename, int width, int height,
 
        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)