From 40fc46a870f44f154d332aafbc25ddd660910036 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Fri, 9 Dec 2011 10:33:35 -0700 Subject: [PATCH] fix PNG reader when alpha isn't wanted and image has tRNS --- collects/racket/draw/unsafe/png.rkt | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/collects/racket/draw/unsafe/png.rkt b/collects/racket/draw/unsafe/png.rkt index 6ce9b8b51d..363f42d4ed 100644 --- a/collects/racket/draw/unsafe/png.rkt +++ b/collects/racket/draw/unsafe/png.rkt @@ -152,6 +152,7 @@ (define-png png_set_gray_to_rgb (_fun _png_structp -> _void)) (define-png png_set_tRNS_to_alpha (_fun _png_structp -> _void)) (define-png png_set_strip_16 (_fun _png_structp -> _void)) +(define-png png_set_strip_alpha (_fun _png_structp -> _void)) (define-png png_set_gray_1_2_4_to_8 (_fun _png_structp -> _void) #:fail (lambda () #f)) (define-png png_set_expand_gray_1_2_4_to_8 (_fun _png_structp -> _void) @@ -267,9 +268,13 @@ [(macosx) 1.7] [else 2.0])) gamma)))) - (when alpha? - ;; Add filler (or alpha) byte (before each RGB triplet) - (png_set_filler png 255 PNG_FILLER_AFTER)) + (cond + [alpha? + ;; Make sure there's an alpha or filler byte (before each RGB triplet): + (png_set_filler png 255 PNG_FILLER_AFTER)] + [tRNS? + ;; Make sure there's no alpha channel: + (png_set_strip_alpha png)]) (let ([num-passes (png_set_interlace_handling png)]) (png_read_update_info png info) (values (make-reader png info ib num-passes w h)