Artifact
1a260d97ea8351f86874a0479dfbcdcb87257715:
0000: 23 6c 61 6e 67 20 72 61 63 6b 65 74 0a 28 72 65 #lang racket.(re
0010: 71 75 69 72 65 0a 20 73 72 66 69 2f 31 37 0a 20 quire. srfi/17.
0020: 66 66 69 2f 75 6e 73 61 66 65 0a 20 22 62 61 73 ffi/unsafe. "bas
0030: 65 2e 72 6b 74 22 29 0a 0a 28 64 65 66 69 6e 65 e.rkt")..(define
0040: 20 6c 69 62 63 64 0a 20 20 28 63 61 73 65 20 28 libcd. (case (
0050: 73 79 73 74 65 6d 2d 74 79 70 65 20 27 6f 73 29 system-type 'os)
0060: 0a 20 20 20 20 5b 28 77 69 6e 64 6f 77 73 29 0a . [(windows).
0070: 20 20 20 20 20 28 66 66 69 2d 6c 69 62 20 22 63 (ffi-lib "c
0080: 64 22 29 5d 0a 20 20 20 20 5b 65 6c 73 65 0a 20 d")]. [else.
0090: 20 20 20 20 28 66 66 69 2d 6c 69 62 20 22 6c 69 (ffi-lib "li
00a0: 62 63 64 22 29 5d 29 29 0a 0a 3b 3b 20 7b 7b 7b bcd")]))..;; {{{
00b0: 20 43 6f 6e 74 65 78 74 20 74 79 70 65 73 0a 0a Context types..
00c0: 28 64 65 66 69 6e 65 20 63 6f 6e 74 65 78 74 3a (define context:
00d0: 69 6d 61 67 65 0a 20 20 28 28 67 65 74 2d 66 66 image. ((get-ff
00e0: 69 2d 6f 62 6a 20 22 63 64 43 6f 6e 74 65 78 74 i-obj "cdContext
00f0: 49 6d 61 67 65 52 47 42 22 20 6c 69 62 63 64 20 ImageRGB" libcd
0100: 28 5f 66 75 6e 20 2d 3e 20 5b 63 6f 6e 74 65 78 (_fun -> [contex
0110: 74 20 3a 20 5f 63 6f 6e 74 65 78 74 5d 29 29 29 t : _context])))
0120: 29 0a 0a 28 64 65 66 69 6e 65 20 63 6f 6e 74 65 )..(define conte
0130: 78 74 3a 64 6f 75 62 6c 65 2d 62 75 66 66 65 72 xt:double-buffer
0140: 0a 20 20 28 28 67 65 74 2d 66 66 69 2d 6f 62 6a . ((get-ffi-obj
0150: 20 22 63 64 43 6f 6e 74 65 78 74 44 42 75 66 66 "cdContextDBuff
0160: 65 72 52 47 42 22 20 6c 69 62 63 64 20 28 5f 66 erRGB" libcd (_f
0170: 75 6e 20 2d 3e 20 5b 63 6f 6e 74 65 78 74 20 3a un -> [context :
0180: 20 5f 63 6f 6e 74 65 78 74 5d 29 29 29 29 0a 0a _context]))))..
0190: 28 70 72 6f 76 69 64 65 0a 20 63 6f 6e 74 65 78 (provide. contex
01a0: 74 3a 69 6d 61 67 65 20 63 6f 6e 74 65 78 74 3a t:image context:
01b0: 64 6f 75 62 6c 65 2d 62 75 66 66 65 72 29 0a 0a double-buffer)..
01c0: 3b 3b 20 7d 7d 7d 0a 0a 3b 3b 20 7b 7b 7b 20 41 ;; }}}..;; {{{ A
01d0: 75 78 69 6c 69 61 72 79 20 66 75 6e 63 74 69 6f uxiliary functio
01e0: 6e 73 0a 0a 28 64 65 66 69 6e 65 20 28 62 79 74 ns..(define (byt
01f0: 65 73 2d 73 6c 69 63 65 20 62 73 74 72 20 6e 20 es-slice bstr n
0200: 6b 20 73 6c 65 6e 29 0a 20 20 28 6c 65 74 20 28 k slen). (let (
0210: 5b 62 6c 65 6e 20 28 62 79 74 65 73 2d 6c 65 6e [blen (bytes-len
0220: 67 74 68 20 62 73 74 72 29 5d 29 0a 20 20 20 20 gth bstr)]).
0230: 28 75 6e 6c 65 73 73 20 28 3d 20 62 6c 65 6e 20 (unless (= blen
0240: 28 2a 20 6e 20 73 6c 65 6e 29 29 0a 20 20 20 20 (* n slen)).
0250: 20 20 28 65 72 72 6f 72 20 27 62 79 74 65 73 2d (error 'bytes-
0260: 73 6c 69 63 65 20 22 64 61 74 61 20 6c 65 6e 67 slice "data leng
0270: 74 68 20 6d 69 73 6d 61 74 63 68 20 28 61 63 74 th mismatch (act
0280: 75 61 6c 20 7e 73 2c 20 72 65 71 75 69 72 65 64 ual ~s, required
0290: 20 7e 73 29 22 20 62 6c 65 6e 20 28 2a 20 6e 20 ~s)" blen (* n
02a0: 73 6c 65 6e 29 29 29 0a 20 20 20 20 28 6c 65 74 slen))). (let
02b0: 20 28 5b 73 6c 69 63 65 20 28 6d 61 6b 65 2d 62 ([slice (make-b
02c0: 79 74 65 73 20 73 6c 65 6e 29 5d 29 0a 20 20 20 ytes slen)]).
02d0: 20 20 20 28 66 6f 72 20 28 5b 62 69 20 28 69 6e (for ([bi (in
02e0: 2d 72 61 6e 67 65 20 6b 20 62 6c 65 6e 20 6e 29 -range k blen n)
02f0: 5d 20 5b 73 69 20 28 69 6e 2d 72 61 6e 67 65 20 ] [si (in-range
0300: 73 6c 65 6e 29 5d 29 0a 20 20 20 20 20 20 20 20 slen)]).
0310: 28 62 79 74 65 73 2d 73 65 74 21 20 73 6c 69 63 (bytes-set! slic
0320: 65 20 73 69 20 28 62 79 74 65 73 2d 72 65 66 20 e si (bytes-ref
0330: 62 73 74 72 20 62 69 29 29 29 0a 20 20 20 20 20 bstr bi))).
0340: 20 73 6c 69 63 65 29 29 29 0a 0a 28 64 65 66 69 slice)))..(defi
0350: 6e 65 20 28 62 79 74 65 73 2d 6d 69 78 20 73 6c ne (bytes-mix sl
0360: 69 63 65 30 20 2e 20 73 6c 69 63 65 2a 29 0a 20 ice0 . slice*).
0370: 20 28 6c 65 74 2a 20 28 5b 6e 20 28 61 64 64 31 (let* ([n (add1
0380: 20 28 6c 65 6e 67 74 68 20 73 6c 69 63 65 2a 29 (length slice*)
0390: 29 5d 0a 20 20 20 20 20 20 20 20 20 5b 62 6c 65 )]. [ble
03a0: 6e 20 28 2a 20 6e 20 28 62 79 74 65 73 2d 6c 65 n (* n (bytes-le
03b0: 6e 67 74 68 20 73 6c 69 63 65 30 29 29 5d 0a 20 ngth slice0))].
03c0: 20 20 20 20 20 20 20 20 5b 62 73 74 72 20 28 6d [bstr (m
03d0: 61 6b 65 2d 62 79 74 65 73 20 62 6c 65 6e 29 5d ake-bytes blen)]
03e0: 29 0a 20 20 20 20 28 66 6f 72 20 28 5b 73 6c 69 ). (for ([sli
03f0: 63 65 20 28 69 6e 2d 63 79 63 6c 65 20 28 69 6e ce (in-cycle (in
0400: 2d 76 61 6c 75 65 20 73 6c 69 63 65 30 29 20 28 -value slice0) (
0410: 69 6e 2d 6c 69 73 74 20 73 6c 69 63 65 2a 29 29 in-list slice*))
0420: 5d 0a 20 20 20 20 20 20 20 20 20 20 5b 62 69 20 ]. [bi
0430: 28 69 6e 2d 72 61 6e 67 65 20 62 6c 65 6e 29 5d (in-range blen)]
0440: 20 23 3a 77 68 65 6e 20 23 74 20 5b 73 69 20 28 #:when #t [si (
0450: 69 6e 2d 76 61 6c 75 65 20 28 71 75 6f 74 69 65 in-value (quotie
0460: 6e 74 20 62 69 20 6e 29 29 5d 29 0a 20 20 20 20 nt bi n))]).
0470: 20 20 28 62 79 74 65 73 2d 73 65 74 21 20 62 73 (bytes-set! bs
0480: 74 72 20 62 69 20 28 62 79 74 65 73 2d 72 65 66 tr bi (bytes-ref
0490: 20 73 6c 69 63 65 20 73 69 29 29 29 0a 20 20 20 slice si))).
04a0: 20 62 73 74 72 29 29 0a 0a 28 64 65 66 69 6e 65 bstr))..(define
04b0: 20 63 61 6e 76 61 73 2d 69 6d 61 67 65 2d 70 75 canvas-image-pu
04c0: 74 2f 72 67 62 21 0a 20 20 28 67 65 74 2d 66 66 t/rgb!. (get-ff
04d0: 69 2d 6f 62 6a 0a 20 20 20 22 63 64 43 61 6e 76 i-obj. "cdCanv
04e0: 61 73 50 75 74 49 6d 61 67 65 52 65 63 74 52 47 asPutImageRectRG
04f0: 42 22 20 6c 69 62 63 64 0a 20 20 20 28 5f 66 75 B" libcd. (_fu
0500: 6e 20 28 63 61 6e 76 61 73 20 64 73 74 2d 78 20 n (canvas dst-x
0510: 64 73 74 2d 79 20 73 72 63 2d 77 69 64 74 68 20 dst-y src-width
0520: 73 72 63 2d 68 65 69 67 68 74 20 64 61 74 61 0a src-height data.
0530: 20 20 20 20 20 20 20 20 20 20 23 3a 77 69 64 74 #:widt
0540: 68 20 5b 64 73 74 2d 77 69 64 74 68 20 30 5d 20 h [dst-width 0]
0550: 23 3a 68 65 69 67 68 74 20 5b 64 73 74 2d 68 65 #:height [dst-he
0560: 69 67 68 74 20 30 5d 0a 20 20 20 20 20 20 20 20 ight 0].
0570: 20 20 23 3a 78 30 20 5b 73 72 63 2d 78 30 20 30 #:x0 [src-x0 0
0580: 5d 20 23 3a 78 31 20 5b 73 72 63 2d 78 31 20 30 ] #:x1 [src-x1 0
0590: 5d 0a 20 20 20 20 20 20 20 20 20 20 23 3a 79 30 ]. #:y0
05a0: 20 5b 73 72 63 2d 79 30 20 30 5d 20 23 3a 79 31 [src-y0 0] #:y1
05b0: 20 5b 73 72 63 2d 79 31 20 30 5d 29 0a 20 20 20 [src-y1 0]).
05c0: 20 20 20 20 20 20 3a 3a 20 5b 63 61 6e 76 61 73 :: [canvas
05d0: 20 3a 20 5f 63 61 6e 76 61 73 5d 0a 20 20 20 20 : _canvas].
05e0: 20 20 20 20 20 20 20 20 5b 73 72 63 2d 77 69 64 [src-wid
05f0: 74 68 20 3a 20 5f 69 6e 74 5d 20 5b 73 72 63 2d th : _int] [src-
0600: 68 65 69 67 68 74 20 3a 20 5f 69 6e 74 5d 0a 20 height : _int].
0610: 20 20 20 20 20 20 20 20 20 20 20 5b 72 65 64 20 [red
0620: 3a 20 5f 62 79 74 65 73 20 3d 20 28 62 79 74 65 : _bytes = (byte
0630: 73 2d 73 6c 69 63 65 20 64 61 74 61 20 33 20 30 s-slice data 3 0
0640: 20 28 2a 20 73 72 63 2d 77 69 64 74 68 20 73 72 (* src-width sr
0650: 63 2d 68 65 69 67 68 74 29 29 5d 0a 20 20 20 20 c-height))].
0660: 20 20 20 20 20 20 20 20 5b 67 72 65 65 6e 20 3a [green :
0670: 20 5f 62 79 74 65 73 20 3d 20 28 62 79 74 65 73 _bytes = (bytes
0680: 2d 73 6c 69 63 65 20 64 61 74 61 20 33 20 31 20 -slice data 3 1
0690: 28 2a 20 73 72 63 2d 77 69 64 74 68 20 73 72 63 (* src-width src
06a0: 2d 68 65 69 67 68 74 29 29 5d 0a 20 20 20 20 20 -height))].
06b0: 20 20 20 20 20 20 20 5b 62 6c 75 65 20 3a 20 5f [blue : _
06c0: 62 79 74 65 73 20 3d 20 28 62 79 74 65 73 2d 73 bytes = (bytes-s
06d0: 6c 69 63 65 20 64 61 74 61 20 33 20 32 20 28 2a lice data 3 2 (*
06e0: 20 73 72 63 2d 77 69 64 74 68 20 73 72 63 2d 68 src-width src-h
06f0: 65 69 67 68 74 29 29 5d 0a 20 20 20 20 20 20 20 eight))].
0700: 20 20 20 20 20 5b 64 73 74 2d 78 20 3a 20 5f 69 [dst-x : _i
0710: 6e 74 5d 20 5b 64 73 74 2d 79 20 3a 20 5f 69 6e nt] [dst-y : _in
0720: 74 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b t]. [
0730: 64 73 74 2d 77 69 64 74 68 20 3a 20 5f 69 6e 74 dst-width : _int
0740: 5d 20 5b 64 73 74 2d 68 65 69 67 68 74 20 3a 20 ] [dst-height :
0750: 5f 69 6e 74 5d 0a 20 20 20 20 20 20 20 20 20 20 _int].
0760: 20 20 5b 73 72 63 2d 78 30 20 3a 20 5f 69 6e 74 [src-x0 : _int
0770: 5d 20 5b 73 72 63 2d 78 31 20 3a 20 5f 69 6e 74 ] [src-x1 : _int
0780: 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 ]. [s
0790: 72 63 2d 79 30 20 3a 20 5f 69 6e 74 5d 20 5b 73 rc-y0 : _int] [s
07a0: 72 63 2d 79 31 20 3a 20 5f 69 6e 74 5d 0a 20 20 rc-y1 : _int].
07b0: 20 20 20 20 20 20 20 2d 3e 20 5f 76 6f 69 64 29 -> _void)
07c0: 29 29 0a 0a 28 64 65 66 69 6e 65 20 63 61 6e 76 ))..(define canv
07d0: 61 73 2d 69 6d 61 67 65 2d 70 75 74 2f 72 67 62 as-image-put/rgb
07e0: 61 21 0a 20 20 28 67 65 74 2d 66 66 69 2d 6f 62 a!. (get-ffi-ob
07f0: 6a 0a 20 20 20 22 63 64 43 61 6e 76 61 73 50 75 j. "cdCanvasPu
0800: 74 49 6d 61 67 65 52 65 63 74 52 47 42 41 22 20 tImageRectRGBA"
0810: 6c 69 62 63 64 0a 20 20 20 28 5f 66 75 6e 20 28 libcd. (_fun (
0820: 63 61 6e 76 61 73 20 64 73 74 2d 78 20 64 73 74 canvas dst-x dst
0830: 2d 79 20 73 72 63 2d 77 69 64 74 68 20 73 72 63 -y src-width src
0840: 2d 68 65 69 67 68 74 20 64 61 74 61 0a 20 20 20 -height data.
0850: 20 20 20 20 20 20 20 23 3a 77 69 64 74 68 20 5b #:width [
0860: 64 73 74 2d 77 69 64 74 68 20 30 5d 20 23 3a 68 dst-width 0] #:h
0870: 65 69 67 68 74 20 5b 64 73 74 2d 68 65 69 67 68 eight [dst-heigh
0880: 74 20 30 5d 0a 20 20 20 20 20 20 20 20 20 20 23 t 0]. #
0890: 3a 78 30 20 5b 73 72 63 2d 78 30 20 30 5d 20 23 :x0 [src-x0 0] #
08a0: 3a 78 31 20 5b 73 72 63 2d 78 31 20 30 5d 0a 20 :x1 [src-x1 0].
08b0: 20 20 20 20 20 20 20 20 20 23 3a 79 30 20 5b 73 #:y0 [s
08c0: 72 63 2d 79 30 20 30 5d 20 23 3a 79 31 20 5b 73 rc-y0 0] #:y1 [s
08d0: 72 63 2d 79 31 20 30 5d 29 0a 20 20 20 20 20 20 rc-y1 0]).
08e0: 20 20 20 3a 3a 20 5b 63 61 6e 76 61 73 20 3a 20 :: [canvas :
08f0: 5f 63 61 6e 76 61 73 5d 0a 20 20 20 20 20 20 20 _canvas].
0900: 20 20 20 20 20 5b 73 72 63 2d 77 69 64 74 68 20 [src-width
0910: 3a 20 5f 69 6e 74 5d 20 5b 73 72 63 2d 68 65 69 : _int] [src-hei
0920: 67 68 74 20 3a 20 5f 69 6e 74 5d 0a 20 20 20 20 ght : _int].
0930: 20 20 20 20 20 20 20 20 5b 72 65 64 20 3a 20 5f [red : _
0940: 62 79 74 65 73 20 3d 20 28 62 79 74 65 73 2d 73 bytes = (bytes-s
0950: 6c 69 63 65 20 64 61 74 61 20 34 20 30 20 28 2a lice data 4 0 (*
0960: 20 73 72 63 2d 77 69 64 74 68 20 73 72 63 2d 68 src-width src-h
0970: 65 69 67 68 74 29 29 5d 0a 20 20 20 20 20 20 20 eight))].
0980: 20 20 20 20 20 5b 67 72 65 65 6e 20 3a 20 5f 62 [green : _b
0990: 79 74 65 73 20 3d 20 28 62 79 74 65 73 2d 73 6c ytes = (bytes-sl
09a0: 69 63 65 20 64 61 74 61 20 34 20 31 20 28 2a 20 ice data 4 1 (*
09b0: 73 72 63 2d 77 69 64 74 68 20 73 72 63 2d 68 65 src-width src-he
09c0: 69 67 68 74 29 29 5d 0a 20 20 20 20 20 20 20 20 ight))].
09d0: 20 20 20 20 5b 62 6c 75 65 20 3a 20 5f 62 79 74 [blue : _byt
09e0: 65 73 20 3d 20 28 62 79 74 65 73 2d 73 6c 69 63 es = (bytes-slic
09f0: 65 20 64 61 74 61 20 34 20 32 20 28 2a 20 73 72 e data 4 2 (* sr
0a00: 63 2d 77 69 64 74 68 20 73 72 63 2d 68 65 69 67 c-width src-heig
0a10: 68 74 29 29 5d 0a 20 20 20 20 20 20 20 20 20 20 ht))].
0a20: 20 20 5b 61 6c 70 68 61 20 3a 20 5f 62 79 74 65 [alpha : _byte
0a30: 73 20 3d 20 28 62 79 74 65 73 2d 73 6c 69 63 65 s = (bytes-slice
0a40: 20 64 61 74 61 20 34 20 33 20 28 2a 20 73 72 63 data 4 3 (* src
0a50: 2d 77 69 64 74 68 20 73 72 63 2d 68 65 69 67 68 -width src-heigh
0a60: 74 29 29 5d 0a 20 20 20 20 20 20 20 20 20 20 20 t))].
0a70: 20 5b 64 73 74 2d 78 20 3a 20 5f 69 6e 74 5d 20 [dst-x : _int]
0a80: 5b 64 73 74 2d 79 20 3a 20 5f 69 6e 74 5d 0a 20 [dst-y : _int].
0a90: 20 20 20 20 20 20 20 20 20 20 20 5b 64 73 74 2d [dst-
0aa0: 77 69 64 74 68 20 3a 20 5f 69 6e 74 5d 20 5b 64 width : _int] [d
0ab0: 73 74 2d 68 65 69 67 68 74 20 3a 20 5f 69 6e 74 st-height : _int
0ac0: 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 ]. [s
0ad0: 72 63 2d 78 30 20 3a 20 5f 69 6e 74 5d 20 5b 73 rc-x0 : _int] [s
0ae0: 72 63 2d 78 31 20 3a 20 5f 69 6e 74 5d 0a 20 20 rc-x1 : _int].
0af0: 20 20 20 20 20 20 20 20 20 20 5b 73 72 63 2d 79 [src-y
0b00: 30 20 3a 20 5f 69 6e 74 5d 20 5b 73 72 63 2d 79 0 : _int] [src-y
0b10: 31 20 3a 20 5f 69 6e 74 5d 0a 20 20 20 20 20 20 1 : _int].
0b20: 20 20 20 2d 3e 20 5f 76 6f 69 64 29 29 29 0a 0a -> _void)))..
0b30: 28 64 65 66 69 6e 65 20 63 61 6e 76 61 73 2d 69 (define canvas-i
0b40: 6d 61 67 65 2f 72 67 62 0a 20 20 28 67 65 74 74 mage/rgb. (gett
0b50: 65 72 2d 77 69 74 68 2d 73 65 74 74 65 72 0a 20 er-with-setter.
0b60: 20 20 28 67 65 74 2d 66 66 69 2d 6f 62 6a 0a 20 (get-ffi-obj.
0b70: 20 20 20 22 63 64 43 61 6e 76 61 73 47 65 74 49 "cdCanvasGetI
0b80: 6d 61 67 65 52 47 42 22 20 6c 69 62 63 64 0a 20 mageRGB" libcd.
0b90: 20 20 20 28 5f 66 75 6e 20 28 63 61 6e 76 61 73 (_fun (canvas
0ba0: 20 78 20 79 20 77 69 64 74 68 20 68 65 69 67 68 x y width heigh
0bb0: 74 29 0a 20 20 20 20 20 20 20 20 20 20 3a 3a 20 t). ::
0bc0: 5b 63 61 6e 76 61 73 20 3a 20 5f 63 61 6e 76 61 [canvas : _canva
0bd0: 73 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 s].
0be0: 5b 72 65 64 20 3a 20 28 5f 62 79 74 65 73 20 6f [red : (_bytes o
0bf0: 20 28 2a 20 77 69 64 74 68 20 68 65 69 67 68 74 (* width height
0c00: 29 29 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ))].
0c10: 20 5b 67 72 65 65 6e 20 3a 20 28 5f 62 79 74 65 [green : (_byte
0c20: 73 20 6f 20 28 2a 20 77 69 64 74 68 20 68 65 69 s o (* width hei
0c30: 67 68 74 29 29 5d 0a 20 20 20 20 20 20 20 20 20 ght))].
0c40: 20 20 20 20 5b 62 6c 75 65 20 3a 20 28 5f 62 79 [blue : (_by
0c50: 74 65 73 20 6f 20 28 2a 20 77 69 64 74 68 20 68 tes o (* width h
0c60: 65 69 67 68 74 29 29 5d 0a 20 20 20 20 20 20 20 eight))].
0c70: 20 20 20 20 20 20 5b 78 20 3a 20 5f 69 6e 74 5d [x : _int]
0c80: 20 5b 79 20 3a 20 5f 69 6e 74 5d 0a 20 20 20 20 [y : _int].
0c90: 20 20 20 20 20 20 20 20 20 5b 77 69 64 74 68 20 [width
0ca0: 3a 20 5f 69 6e 74 5d 20 5b 68 65 69 67 68 74 20 : _int] [height
0cb0: 3a 20 5f 69 6e 74 5d 0a 20 20 20 20 20 20 20 20 : _int].
0cc0: 20 20 2d 3e 20 5f 76 6f 69 64 0a 20 20 20 20 20 -> _void.
0cd0: 20 20 20 20 20 2d 3e 20 28 62 79 74 65 73 2d 6d -> (bytes-m
0ce0: 69 78 20 72 65 64 20 67 72 65 65 6e 20 62 6c 75 ix red green blu
0cf0: 65 29 29 29 0a 20 20 20 63 61 6e 76 61 73 2d 69 e))). canvas-i
0d00: 6d 61 67 65 2d 70 75 74 2f 72 67 62 21 29 29 0a mage-put/rgb!)).
0d10: 0a 28 70 72 6f 76 69 64 65 0a 20 63 61 6e 76 61 .(provide. canva
0d20: 73 2d 69 6d 61 67 65 2f 72 67 62 20 63 61 6e 76 s-image/rgb canv
0d30: 61 73 2d 69 6d 61 67 65 2d 70 75 74 2f 72 67 62 as-image-put/rgb
0d40: 21 20 63 61 6e 76 61 73 2d 69 6d 61 67 65 2d 70 ! canvas-image-p
0d50: 75 74 2f 72 67 62 61 21 29 0a 0a 3b 3b 20 7d 7d ut/rgba!)..;; }}
0d60: 7d 0a }.