On this page:
cache-image-snip%
equal-to?
get-argb
get-argb-proc
get-argb/ no-compute
get-bitmap
get-dc-proc
get-pinhole
get-size
other-equal-to?
snip-class
make-argb
argb-vector
argb-width
argb-height
argb?
overlay-bitmap
build-bitmap
flatten-bitmap
argb->cache-image-snip
argb->bitmap

3 Cache-image Snip

The mrlib/cache-image-snip library provides the core data structure for DrRacket’s "image.rkt" teachpack. Images in the "image.rkt" teachpack are instances of the cache-image-snip% class.

The library also defines a new type, argb, that represents a bitmap, but with alpha values. It has a maker, two selectors, and a predicate.

The cache-image-snip% class is a subclass of image-snip% simply so that its instances can be compared with image-snip% using equal?. All image-snip% functionality is overridden or ignored.

(send a-cache-image-snip equal-to? snip    
  equal?)  boolean?
  snip : (is-a?/c image-snip%)
  equal? : (any/c any/c . -> . boolean?)
Calls the other-equal-to? method of snip if it is also a cache-image-snip% instance, otherwise calls the other-equal-to? of a-cache-image-snip.

(send a-cache-image-snip get-argb)  argb?
Returns a pixel array for this image, forcing it to be computed.

(send a-cache-image-snip get-argb-proc)
  (argb? exact-integer? exact-integer? . -> . void?)
Returns a procedure that fills in an argb with the contents of this image at the given offset

(send a-cache-image-snip get-argb/no-compute)
  (or/c false/c argb?)
Returns a pixel array for this image or #f if it has not been computed yet.

(send a-cache-image-snip get-bitmap)
  (or/c false/c (is-a?/c bitmap%))
Overrides get-bitmap in image-snip%.
Builds (if not yet built) a bitmap corresponding to this snip and returns it.

If the width or the height of the snip is 0, this method return #f.

(send a-cache-image-snip get-dc-proc)
  (or/c false/c ((is-a?/c dc<%>) real? real? -> void?))
Either returns false, or a procedure that draws the contents of this snip into a dc.

(send a-cache-image-snip get-pinhole)  
real? real?
Returns the pinhole coordinates for this image, counting from the top-left of the image.

Returns the width and height for the image.

(send a-cache-image-snip other-equal-to? snip    
  equal?)  boolean?
  snip : (is-a?/c image-snip%)
  equal? : (any/c any/c . -> . boolean?)
Refines the comparison of other-equal-to? in image-snip% to exactly match alpha channels.

This snipclass is used for saved cache image snips.

(make-argb vectorof width height)  argb?
  vectorof : (integer-in 0 255)
  width : exact-nonnegative-integer?
  height : exact-nonnegative-integer?
Constructs a new argb value. The vector has four entries for each pixel, an alpha, red, green, and blue value. The int specifies the width of the image; the height is the size of the vector, divided by 4, divided by the width.

(argb-vector argb)  (vectorof (integer-in 0 255))
  argb : argb?
Extracts the vector from argb.

(argb-width argb)  exact-nonnegative-integer?
  argb : argb?
Extracts the width from argb.

(argb-height argb)  exact-nonnegative-integer?
  argb : argb?
Extracts the height from argb.

(argb? v)  boolean?
  v : any/c
Returns #t if v is an argb, #f otherwise.

(overlay-bitmap dest dx dy img mask)  void?
  dest : argb?
  dx : exact-integer?
  dy : exact-integer?
  img : (is-a?/c bitmap%)
  mask : (is-a?/c bitmap%)
Changes argb, overlaying img with masking based on mask at (dx, dy) from the top-left.

(build-bitmap draw width height)  (is-a?/c bitmap%)
  draw : ((is-a?/c dc<%>) . -> . any)
  width : (integer-in 1 10000)
  height : (integer-in 1 10000)
Builds a bitmap of size width by height, using the procedure draw to render the bitmap content into the given dc<%>.

(flatten-bitmap bitmap)  (is-a?/c bitmap%)
  bitmap : (is-a?/c bitmap%)
Builds a new bitmap that flattens the original bitmap with its mask (as determined by get-loaded-mask in bitmap%), producing a bitmap that has no mask, and looks the way that bitmap would draw (when drawn with the mask) onto a white background.

(argb->cache-image-snip argb dx dy)  (is-a?/c cache-image-snip%)
  argb : argb?
  dx : real?
  dy : real?
Builds a new cache-image-snip% based on the contents of argb, using dx and dy as the pinhole.

(argb->bitmap argb)  (or/c false/c (is-a?/c bitmap%))
  argb : argb?
Builds a bitmap that draws the same way as argb; the alpha pixels are put into the bitmap’s get-loaded-mask bitmap.

If the width or height of argb is 0, this returns #f.