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 <lyss...@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

_________________________
  Racket Developers list:
  http://lists.racket-lang.org/dev

Reply via email to