racket/draw: fix problems with monochrome PNGs

Merge to v5.3.1

original commit: 274d0045464b80116fa83faef4cc21e87f651a7c
This commit is contained in:
Matthew Flatt 2012-10-18 10:00:53 -06:00
parent 22535c00df
commit 06e7b26962

View File

@ -623,6 +623,47 @@
(let ([bm (make-object bitmap% 1 1)])
(test #t 'load-file (send bm load-file (collection-file-path "sk.jpg" "icons"))))
;; ----------------------------------------
;; Check save & load of monochrome PNG:
(let ()
(define N 5)
(define bm (make-object bitmap% N N #t #f))
(define dc (make-object bitmap-dc% bm))
(send dc draw-rectangle 2 2 (- N 2) (- N 2))
(define-values (i o) (make-pipe))
(send bm save-file o 'png)
(close-output-port o)
(define bm2 (make-object bitmap% 10 10))
(send bm2 load-file i 'png)
(define-values (i2 o2) (make-pipe))
(send bm save-file o2 'png)
(close-output-port o2)
(define bm3 (read-bitmap i2))
(define s1 (make-bytes (* N N 4)))
(define s2 (make-bytes (* N N 4)))
(define s3 (make-bytes (* N N 4)))
(send bm get-argb-pixels 0 0 N N s1)
(send bm2 get-argb-pixels 0 0 N N s2)
(send bm3 get-argb-pixels 0 0 N N s3)
(test #t 'same (equal? s1 s2))
(test #t 'same (equal? s1 s3))
(test 1 'mono (send bm2 get-depth))
(test 1 'mono (send bm3 get-depth))
(test #f 'b&w (send bm2 is-color?))
(test #f 'b&w (send bm3 is-color?))
(test #f 'no-alpha (send bm2 has-alpha-channel?))
(test #f 'no-alpha (send bm3 has-alpha-channel?)))
;; ----------------------------------------
(report-errs)