`set-argb-pixels' needs to pre-multiply alpha for a alpha-channel bitmap

Closes PR 11571
This commit is contained in:
Matthew Flatt 2010-12-27 19:14:22 -07:00
parent 719df98d83
commit 5440edfd74

View File

@ -670,12 +670,18 @@
(bytes-set! data (+ ri 1) v) (bytes-set! data (+ ri 1) v)
(bytes-set! data (+ ri 2) v) (bytes-set! data (+ ri 2) v)
(bytes-set! data (+ ri B) v)) (bytes-set! data (+ ri B) v))
(begin (if alpha-channel?
(when alpha-channel? (let ([a (bytes-ref bstr pi)]
(bytes-set! data (+ ri A) (bytes-ref bstr pi))) [pm (lambda (a v)
(bytes-set! data (+ ri R) (bytes-ref bstr (+ pi 1))) (quotient (* a v) 255))])
(bytes-set! data (+ ri G) (bytes-ref bstr (+ pi 2))) (bytes-set! data (+ ri A) a)
(bytes-set! data (+ ri B) (bytes-ref bstr (+ pi 3))))))))))) (bytes-set! data (+ ri R) (pm a (bytes-ref bstr (+ pi 1))))
(bytes-set! data (+ ri G) (pm a (bytes-ref bstr (+ pi 2))))
(bytes-set! data (+ ri B) (pm a (bytes-ref bstr (+ pi 3)))))
(begin
(bytes-set! data (+ ri R) (bytes-ref bstr (+ pi 1)))
(bytes-set! data (+ ri G) (bytes-ref bstr (+ pi 2)))
(bytes-set! data (+ ri B) (bytes-ref bstr (+ pi 3))))))))))))
(cairo_surface_mark_dirty s))) (cairo_surface_mark_dirty s)))
(cond (cond
[(and set-alpha? [(and set-alpha?