fix alpha-only mode of `get-argb-pixels'
Closes PR 11927
This commit is contained in:
parent
b65054134a
commit
905eb11651
|
@ -718,7 +718,7 @@
|
||||||
(for ([j (in-range y (min (+ y h) height))])
|
(for ([j (in-range y (min (+ y h) height))])
|
||||||
(let ([row (* j row-width)])
|
(let ([row (* j row-width)])
|
||||||
(for ([i (in-range x (min (+ x w) width))])
|
(for ([i (in-range x (min (+ x w) width))])
|
||||||
(let ([p (* 4 (+ i (* j w)))]
|
(let ([p (* 4 (+ (- i x) (* (- j y) w)))]
|
||||||
[q (+ row (* i 4))])
|
[q (+ row (* i 4))])
|
||||||
(bytes-set! bstr p (bytes-ref data (+ q A)))))))))
|
(bytes-set! bstr p (bytes-ref data (+ q A)))))))))
|
||||||
|
|
||||||
|
|
|
@ -76,7 +76,8 @@ The pixel RGB values are copied into @scheme[pixels]. The first byte
|
||||||
If @scheme[alpha?] is false, if the bitmap does not have an alpha
|
If @scheme[alpha?] is false, if the bitmap does not have an alpha
|
||||||
channel, then the alpha value for each pixel is set to 255. If
|
channel, then the alpha value for each pixel is set to 255. If
|
||||||
@scheme[alpha?] is true, then @italic{only} the alpha value is set
|
@scheme[alpha?] is true, then @italic{only} the alpha value is set
|
||||||
for each pixel, based on each pixel's inverted value. Thus, when a
|
for each pixel; if the bitmap has no alpha channel, then the alpha
|
||||||
|
value is based on each pixel's inverted RGB average. Thus, when a
|
||||||
bitmap has a separate mask bitmap, the same @scheme[pixels] byte
|
bitmap has a separate mask bitmap, the same @scheme[pixels] byte
|
||||||
string is in general filled from two bitmaps: one (the main image)
|
string is in general filled from two bitmaps: one (the main image)
|
||||||
for the pixel values and one (the mask) for the alpha values.
|
for the pixel values and one (the mask) for the alpha values.
|
||||||
|
|
|
@ -365,4 +365,32 @@
|
||||||
|
|
||||||
;; ----------------------------------------
|
;; ----------------------------------------
|
||||||
|
|
||||||
|
(let ()
|
||||||
|
(define (get-column-alpha bm x y)
|
||||||
|
(define bs (make-bytes 4))
|
||||||
|
(send bm get-argb-pixels x y 1 1 bs #t)
|
||||||
|
bs)
|
||||||
|
(define abm (make-object bitmap% 2 2 #f #t))
|
||||||
|
(define nbm (make-object bitmap% 2 2 #f #f))
|
||||||
|
(define (avg bstr) (- 255
|
||||||
|
(quotient (+ (bytes-ref bstr 0)
|
||||||
|
(bytes-ref bstr 1)
|
||||||
|
(bytes-ref bstr 2))
|
||||||
|
3)))
|
||||||
|
(send abm set-argb-pixels 0 0 2 2 #"0123456789abcdef")
|
||||||
|
(send nbm set-argb-pixels 0 0 2 2 #"0123456789abcdef")
|
||||||
|
|
||||||
|
(test (bytes (char->integer #\0) 0 0 0) 'a0+0 (get-column-alpha abm 0 0))
|
||||||
|
(test (bytes (char->integer #\4) 0 0 0) 'a1+0 (get-column-alpha abm 1 0))
|
||||||
|
(test (bytes (char->integer #\8) 0 0 0) 'a0+1 (get-column-alpha abm 0 1))
|
||||||
|
(test (bytes (char->integer #\c) 0 0 0) 'a1+1 (get-column-alpha abm 1 1))
|
||||||
|
|
||||||
|
(test (bytes (avg #"123") 0 0 0) 'n0+0 (get-column-alpha nbm 0 0))
|
||||||
|
(test (bytes (avg #"567") 0 0 0) 'n1+0 (get-column-alpha nbm 1 0))
|
||||||
|
(test (bytes (avg #"9ab") 0 0 0) 'n0+1 (get-column-alpha nbm 0 1))
|
||||||
|
(test (bytes (avg #"def") 0 0 0) 'n1+1 (get-column-alpha nbm 1 1)))
|
||||||
|
|
||||||
|
|
||||||
|
;; ----------------------------------------
|
||||||
|
|
||||||
(report-errs)
|
(report-errs)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user