`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 2) v)
(bytes-set! data (+ ri B) v))
(begin
(when alpha-channel?
(bytes-set! data (+ ri A) (bytes-ref bstr pi)))
(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)))))))))))
(if alpha-channel?
(let ([a (bytes-ref bstr pi)]
[pm (lambda (a v)
(quotient (* a v) 255))])
(bytes-set! data (+ ri A) a)
(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)))
(cond
[(and set-alpha?