[racket-dev] 2htdp/image Feature Suggestion

From: Robby Findler (robby at eecs.northwestern.edu)
Date: Sat Jun 21 20:02:22 EDT 2014

What do you think about a variant on center-crop called crop/align
that accepts a width, a height, an image, and an x-place and a
y-place?

That would seem to fit better into the library the way it's currently
constructed.

For working around the frame issue, how about just a color-frame
function that controls the color for now?

Robby

Robby

On Sat, Jun 21, 2014 at 1:42 PM, Kevin Forchione <lysseus at gmail.com> wrote:
> Hi guys,
> I’ve been working with 2htdp/image and been struck by its monitor-oriented coordinate system and its image-centric perspective, both of which have proven a rich bed for new tools. I’ve found these two functions have been useful to me and might be useful for others. I’ve particularly found them useful as my racket sessions use the “white on black” color schemes, and with my eyesight a pixel’s contrast makes a difference.
>
> The center-crop function facilitates the image-cntric perspective of the library by centering the cropping rectangle on the image center. The frame function replaces the library’s existing function with one that does the same thing, but also provides parameters for setting the pixel frame coloring, background coloring within the frame, and x/y offsets that work with center-crop to expand or shrink the framing of the image.
>
> ;; center-crop: width height image -> image?
> ;; crops image in a rectangle of width x height whose center is image center.
> (define (center-crop width height img)
>   (crop (- (quotient (image-width img) 2) (quotient width 2))
>         (- (quotient (image-height img) 2) (quotient height 2))
>         width
>         height
>         img))
>
> ;; frame: image frame-option ... -> image?
> ;; Returns an image just like image, except with a frame-color'd, single pixel frame
> ;; around the bounding box of the image. The background-color indicates the color
> ;; inside the frame over which the image is laid. If an offset is provided it
> ;; indicates a center-crop in that dimension. A positive value extends the crop
> ;; beyond the image bounding box, a negative value center-crops the image within
> ;; the bounding box.
> (define (frame img
>                #:frame-color (frame-color 'black)
>                #:background-color (background-color 'transparent)
>                #:frame-offset (frame-offset 0)
>                #:frame-x-offset (frame-x-offset frame-offset)
>                #:frame-y-offset (frame-y-offset frame-offset))
>   (let ([width (+ (image-width img) frame-x-offset)]
>         [height (+ (image-height img) frame-y-offset)])
>     (overlay (rectangle width height 'outline frame-color)
>              (center-crop width height img)
>              (rectangle width height 'solid background-color))))
>
> -Kevin
> _________________________
>   Racket Developers list:
>   http://lists.racket-lang.org/dev


Posted on the dev mailing list.