X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;ds=sidebyside;f=images%2Fio-libpng.c;h=f15955a64cf83c045bd953cb1afa33fd96908b96;hb=94022b1a1e317871b302946b595b2e890f4f1853;hp=1e1704f8cef4547fe1b28766c4c9e5c716838117;hpb=422234aee83909200561bcce45f6bc1ed84f4789;p=libucw.git diff --git a/images/io-libpng.c b/images/io-libpng.c index 1e1704f8..f15955a6 100644 --- a/images/io-libpng.c +++ b/images/io-libpng.c @@ -224,10 +224,20 @@ libpng_read_data(struct image_io *io) } else png_set_palette_to_rgb(rd->png_ptr); - if ((io->flags & IMAGE_ALPHA) || (io->flags & IMAGE_PIXEL_FORMAT) == (COLOR_SPACE_RGB | IMAGE_PIXELS_ALIGNED)) - png_set_add_alpha(rd->png_ptr, 255, PNG_FILLER_AFTER); + if (!(io->flags & IMAGE_ALPHA)) + { + if (io->flags & IMAGE_IO_USE_BACKGROUND) + { + png_set_add_alpha(rd->png_ptr, 255, PNG_FILLER_AFTER); + read_flags = (read_flags | IMAGE_ALPHA) & IMAGE_CHANNELS_FORMAT; + } + else if ((io->flags & IMAGE_PIXEL_FORMAT) == (COLOR_SPACE_RGB | IMAGE_PIXELS_ALIGNED)) + png_set_add_alpha(rd->png_ptr, 255, PNG_FILLER_AFTER); + else + png_set_strip_alpha(rd->png_ptr); + } else - png_set_strip_alpha(rd->png_ptr); + png_set_add_alpha(rd->png_ptr, 255, PNG_FILLER_AFTER); break; case PNG_COLOR_TYPE_GRAY: if ((io->flags & IMAGE_COLOR_SPACE) == COLOR_SPACE_RGB) @@ -241,7 +251,7 @@ libpng_read_data(struct image_io *io) if (!(io->flags & IMAGE_ALPHA)) { if (io->flags & IMAGE_IO_USE_BACKGROUND) - read_flags |= IMAGE_ALPHA; + read_flags = (read_flags | IMAGE_ALPHA) & IMAGE_CHANNELS_FORMAT; else png_set_strip_alpha(rd->png_ptr); } @@ -255,13 +265,11 @@ libpng_read_data(struct image_io *io) case PNG_COLOR_TYPE_RGB_ALPHA: if ((io->flags & IMAGE_COLOR_SPACE) == COLOR_SPACE_GRAYSCALE) png_set_rgb_to_gray_fixed(rd->png_ptr, 1, 21267, 71514); - if (!(io->flags & IMAGE_ALPHA) && (io->flags & IMAGE_PIXEL_FORMAT) != (COLOR_SPACE_RGB | IMAGE_PIXELS_ALIGNED)) - { - if (io->flags & IMAGE_IO_USE_BACKGROUND) - read_flags |= IMAGE_ALPHA; - else - png_set_strip_alpha(rd->png_ptr); - } + if (!(io->flags & IMAGE_ALPHA)) + if (io->flags & IMAGE_IO_USE_BACKGROUND) + read_flags = (read_flags | IMAGE_ALPHA) & IMAGE_CHANNELS_FORMAT; + else if ((io->flags & IMAGE_PIXEL_FORMAT) != (COLOR_SPACE_RGB | IMAGE_PIXELS_ALIGNED)) + png_set_strip_alpha(rd->png_ptr); break; default: ASSERT(0);