[ sorry -- hit send too soon. ] I like your idea for alphas in colors. I'll add that, hopefully today.
In the meantime, here's map-image with the current colors. #lang racket/base (require racket/draw racket/snip racket/class 2htdp/image (only-in mrlib/image-core render-image)) (define (map-image img f) (define w (image-width img)) (define h (image-height img)) (define bm (make-bitmap w h)) (define bdc (make-object bitmap-dc% bm)) (render-image img bdc 0 0) (send bdc set-bitmap #f) (define bytes (make-bytes (* w h 4))) (send bm get-argb-pixels 0 0 w h bytes) (for ([i (in-range 0 (* w h 4) 4)]) (define nc (f (make-color (bytes-ref bytes (+ i 1)) (bytes-ref bytes (+ i 2)) (bytes-ref bytes (+ i 3))))) (bytes-set! bytes i 255) (bytes-set! bytes (+ i 1) (color-red nc)) (bytes-set! bytes (+ i 2) (color-green nc)) (bytes-set! bytes (+ i 3) (color-blue nc))) (send bm set-argb-pixels 0 0 w h bytes) (make-object image-snip% bm)) (overlay (rectangle 100 10 "solid" "purple") (rectangle 10 100 "solid" "forestgreen")) (map-image (overlay (rectangle 100 10 "solid" "purple") (rectangle 10 100 "solid" "forestgreen")) (λ (c) (define avg (floor (/ (+ (color-red c) (color-blue c) (color-green c)) 3))) (make-color avg avg avg))) On Mon, Dec 27, 2010 at 7:47 AM, Robby Findler <ro...@eecs.northwestern.edu> wrote: > On Mon, Dec 27, 2010 at 7:13 AM, Stephen Bloch <sbl...@adelphi.edu> wrote: >> I'm trying to port the picturing-programs teachpack to still work with 5.1. >> (BTW, approximately how long do I have to do that before 5.1 is released?) > > We have not started the release process yet, but the release is > sometime in Jan. Generally releases are every 3 months. Ryan should > know the precise dates. > >> Right now it crashes because the API for make-bitmap has changed -- for the >> better, I think, but I still need to fix things. > > Which make-bitmap would that be? Are you talking about the internal, > private constructor? > >> I've got a "map-image" function that creates a [bitmap] image the same width >> and height as an existing image by mapping a color->color function on its >> pixels, and a "build-image" function that creates a [bitmap] image of a >> specified width and height by mapping a specified function on the >> coordinates of its pixels. I also wrote (but didn't really document) a >> "map-masked-image" and "build-masked-image" which do the same, but the >> mapped function is also allowed to return #f, in which case the specified >> pixel is made transparent (i.e. alpha=0). I can tweak those to work with >> the new make-bitmap, but the process got me wondering... >> >> It would be nice if I could allow students to generate alphas other than 1 >> and 0. It seems to me the cleanest way to do this is with an alpha-color >> struct (which existed in htdp/image, but seems to be gone from 2htdp/image). >> I can do that myself, putting in glue code between it and 2htdp/image to >> convert back and forth among various color-like-things (color, alpha-color, >> string, symbol, color%, and #f for transparency), but 2htdp/image is already >> doing a lot of that, and it feels really inefficient to re-do it. >> >> What would you think of ALL "color" structs actually having an alpha >> component, with the constructor allowing alpha to default to 1? > > I think you should be operating at the racket/draw bitmap level, not > the 2htdp/image bitmap level. That is, use the render-image function > to get a bitmap, and then make a loop that calls their function and > fills in a bytes and then turn that bytes back into a bitmap. This > will save creating a bunch of intermediate data and is a simpler > function overall. > > Robby > _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/users