Make 2htdp/image produce png-convertible results.
This commit is contained in:
parent
fc4165ec40
commit
d92ce41a6f
|
@ -51,6 +51,7 @@
|
||||||
racket/port
|
racket/port
|
||||||
wxme
|
wxme
|
||||||
rackunit
|
rackunit
|
||||||
|
file/convertible
|
||||||
(only-in lang/imageeq image=?)
|
(only-in lang/imageeq image=?)
|
||||||
(prefix-in 1: htdp/image)
|
(prefix-in 1: htdp/image)
|
||||||
(only-in lang/htdp-advanced equal~?))
|
(only-in lang/htdp-advanced equal~?))
|
||||||
|
@ -2051,6 +2052,9 @@
|
||||||
=>
|
=>
|
||||||
#f))
|
#f))
|
||||||
|
|
||||||
|
(test (convertible? (circle 20 "solid" "red")) => #t)
|
||||||
|
(test (bytes? (convert (circle 20 "solid" "red") 'png-bytes)) => #t)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
|
@ -36,7 +36,8 @@ has been moved out).
|
||||||
"private/image-core-snipclass.rkt"
|
"private/image-core-snipclass.rkt"
|
||||||
"private/regmk.rkt"
|
"private/regmk.rkt"
|
||||||
(prefix-in cis: "cache-image-snip.ss")
|
(prefix-in cis: "cache-image-snip.ss")
|
||||||
(for-syntax racket/base))
|
(for-syntax racket/base)
|
||||||
|
file/convertible)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -197,8 +198,29 @@ has been moved out).
|
||||||
(define skip-image-equality-fast-path (make-parameter #f))
|
(define skip-image-equality-fast-path (make-parameter #f))
|
||||||
(define render-normalized (make-parameter #f))
|
(define render-normalized (make-parameter #f))
|
||||||
|
|
||||||
|
(define png-convertible<%>
|
||||||
|
(interface* ()
|
||||||
|
([prop:convertible
|
||||||
|
(lambda (img format default)
|
||||||
|
(case format
|
||||||
|
[(png-bytes)
|
||||||
|
(let ([s (open-output-bytes)])
|
||||||
|
(send (to-bitmap (to-img img)) save-file s 'png)
|
||||||
|
(get-output-bytes s))]
|
||||||
|
[else default]))])))
|
||||||
|
|
||||||
|
(define (to-bitmap img)
|
||||||
|
(let* ([bb (send img get-bb)]
|
||||||
|
[bm (make-object bitmap%
|
||||||
|
(add1 (inexact->exact (ceiling (bb-right bb))))
|
||||||
|
(add1 (inexact->exact (ceiling (bb-bottom bb)))))]
|
||||||
|
[bdc (make-object bitmap-dc% bm)])
|
||||||
|
(send bdc clear)
|
||||||
|
(render-image img bdc 0 0)
|
||||||
|
(send bdc get-bitmap)))
|
||||||
|
|
||||||
(define image%
|
(define image%
|
||||||
(class* snip% (equal<%> image<%>)
|
(class* snip% (png-convertible<%> equal<%> image<%>)
|
||||||
(init-field shape bb normalized? pinhole)
|
(init-field shape bb normalized? pinhole)
|
||||||
(define/public (equal-to? that eq-recur)
|
(define/public (equal-to? that eq-recur)
|
||||||
(or (eq? this that)
|
(or (eq? this that)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user