Grayscale image: Difference between revisions

Content added Content deleted
Line 1,167: Line 1,167:
# Convert back to "colour"
# Convert back to "colour"
plot(p3 <- as(p2, "pixmapRGB"))</lang>
plot(p3 <- as(p2, "pixmapRGB"))</lang>

=={{header|Racket}}==
<lang racket>
#lang racket
(require racket/draw)

(define (gray->color gray-bm)
(define gray-dc (new bitmap-dc% [bitmap gray-bm]))
(define-values (w h) (send gray-dc get-size))
(define width (exact-floor w))
(define height (exact-floor h))
(define color-bm (make-bitmap width height))
(define color-dc (new bitmap-dc% [bitmap color-bm]))
(define pixels (make-bytes (* 4 width height)))
(send gray-dc get-argb-pixels 0 0 width height pixels)
(send color-dc set-argb-pixels 0 0 width height pixels)
color-bm)

(define (color->gray color-bm)
(define color-dc (new bitmap-dc% [bitmap color-bm]))
(define-values (w h) (send color-dc get-size))
(define width (exact-floor w))
(define height (exact-floor h))
(define gray-bm (make-bitmap width height))
(define gray-dc (new bitmap-dc% [bitmap gray-bm]))
(define pixels (make-bytes (* 4 width height)))
(send color-dc get-argb-pixels 0 0 width height pixels)
(for ([i (in-range 0 (* 4 width height) 4)])
(define α (bytes-ref pixels i))
(define r (bytes-ref pixels (+ i 1)))
(define g (bytes-ref pixels (+ i 2)))
(define b (bytes-ref pixels (+ i 3)))
(define l (exact-floor (+ (* 0.2126 r) (* 0.7152 g) (* 0.0722 b))))
(bytes-set! pixels (+ i 1) l)
(bytes-set! pixels (+ i 2) l)
(bytes-set! pixels (+ i 3) l))
(send gray-dc set-argb-pixels 0 0 width height pixels)
gray-bm)

(require images/icons/symbol)
(define rosetta (text-icon "Rosetta Code" #:color "red" #:height 80))
rosetta
(color->gray rosetta)
(gray->color (color->gray rosetta))
</lang>


=={{header|REXX}}==
=={{header|REXX}}==