Artifact
f93c0076327f9eac0e64b3e2c13fa69da2757571:
0000: 3b 3b 20 2d 2a 2d 20 6d 6f 64 65 3a 20 53 63 68 ;; -*- mode: Sch
0010: 65 6d 65 3b 20 74 61 62 2d 77 69 64 74 68 3a 20 eme; tab-width:
0020: 32 3b 20 2d 2a 2d 20 3b 3b 0a 0a 3b 3b 20 7b 7b 2; -*- ;;..;; {{
0030: 7b 20 44 61 74 61 20 74 79 70 65 73 0a 0a 28 66 { Data types..(f
0040: 6f 72 65 69 67 6e 2d 64 65 63 6c 61 72 65 0a 09 oreign-declare..
0050: 22 23 69 6e 63 6c 75 64 65 20 3c 63 64 2e 68 3e "#include <cd.h>
0060: 5c 6e 22 0a 09 22 23 69 6e 63 6c 75 64 65 20 3c \n".."#include <
0070: 63 64 69 72 67 62 2e 68 3e 5c 6e 22 29 0a 0a 28 cdirgb.h>\n")..(
0080: 69 6e 63 6c 75 64 65 20 22 63 61 6e 76 61 73 2d include "canvas-
0090: 64 72 61 77 2d 74 79 70 65 73 2e 73 63 6d 22 29 draw-types.scm")
00a0: 0a 0a 3b 3b 20 7d 7d 7d 0a 0a 3b 3b 20 7b 7b 7b ..;; }}}..;; {{{
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 09 28 66 6f 72 65 69 67 6e 2d image..(foreign-
00e0: 76 61 6c 75 65 20 22 43 44 5f 49 4d 41 47 45 52 value "CD_IMAGER
00f0: 47 42 22 20 6e 6f 6e 6e 75 6c 6c 2d 63 6f 6e 74 GB" nonnull-cont
0100: 65 78 74 29 29 0a 0a 28 64 65 66 69 6e 65 20 63 ext))..(define c
0110: 6f 6e 74 65 78 74 3a 64 6f 75 62 6c 65 2d 62 75 ontext:double-bu
0120: 66 66 65 72 0a 09 28 66 6f 72 65 69 67 6e 2d 76 ffer..(foreign-v
0130: 61 6c 75 65 20 22 43 44 5f 44 42 55 46 46 45 52 alue "CD_DBUFFER
0140: 52 47 42 22 20 6e 6f 6e 6e 75 6c 6c 2d 63 6f 6e RGB" nonnull-con
0150: 74 65 78 74 29 29 0a 0a 3b 3b 20 7d 7d 7d 0a 0a text))..;; }}}..
0160: 3b 3b 20 7b 7b 7b 20 41 75 78 69 6c 69 61 72 79 ;; {{{ Auxiliary
0170: 20 66 75 6e 63 74 69 6f 6e 73 0a 0a 28 64 65 66 functions..(def
0180: 69 6e 65 20 63 61 6e 76 61 73 2d 69 6d 61 67 65 ine canvas-image
0190: 2d 70 75 74 2f 72 67 62 21 0a 09 28 6c 65 74 72 -put/rgb!..(letr
01a0: 65 63 20 28 5b 63 61 6e 76 61 73 2d 69 6d 61 67 ec ([canvas-imag
01b0: 65 2d 73 65 74 2f 72 67 62 2f 72 61 77 21 0a 09 e-set/rgb/raw!..
01c0: 20 20 20 20 20 20 20 20 20 20 28 66 6f 72 65 69 (forei
01d0: 67 6e 2d 6c 61 6d 62 64 61 2a 20 76 6f 69 64 20 gn-lambda* void
01e0: 28 5b 6e 6f 6e 6e 75 6c 6c 2d 63 61 6e 76 61 73 ([nonnull-canvas
01f0: 20 63 61 6e 76 61 73 5d 20 5b 69 6e 74 20 64 73 canvas] [int ds
0200: 74 5f 78 5d 20 5b 69 6e 74 20 64 73 74 5f 79 5d t_x] [int dst_y]
0210: 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
0220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0230: 20 20 20 5b 69 6e 74 20 73 72 63 5f 77 69 64 74 [int src_widt
0240: 68 5d 20 5b 69 6e 74 20 73 72 63 5f 68 65 69 67 h] [int src_heig
0250: 68 74 5d 20 5b 6e 6f 6e 6e 75 6c 6c 2d 62 6c 6f ht] [nonnull-blo
0260: 62 20 64 61 74 61 5d 0a 09 20 20 20 20 20 20 20 b data]..
0270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0280: 20 20 20 20 20 20 20 20 20 20 5b 69 6e 74 20 64 [int d
0290: 73 74 5f 77 69 64 74 68 5d 20 5b 69 6e 74 20 64 st_width] [int d
02a0: 73 74 5f 68 65 69 67 68 74 5d 0a 09 20 20 20 20 st_height]..
02b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
02c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 69 6e [in
02d0: 74 20 73 72 63 5f 78 30 5d 20 5b 69 6e 74 20 73 t src_x0] [int s
02e0: 72 63 5f 78 31 5d 20 5b 69 6e 74 20 73 72 63 5f rc_x1] [int src_
02f0: 79 30 5d 20 5b 69 6e 74 20 73 72 63 5f 79 31 5d y0] [int src_y1]
0300: 29 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 22 ).. "
0310: 63 6f 6e 73 74 20 69 6e 74 20 6e 63 68 61 6e 73 const int nchans
0320: 20 3d 20 33 3b 5c 6e 22 0a 09 20 20 20 20 20 20 = 3;\n"..
0330: 20 20 20 20 09 22 75 6e 73 69 67 6e 65 64 20 63 ."unsigned c
0340: 68 61 72 20 63 68 61 6e 73 5b 6e 63 68 61 6e 73 har chans[nchans
0350: 5d 5b 73 72 63 5f 77 69 64 74 68 20 2a 20 73 72 ][src_width * sr
0360: 63 5f 68 65 69 67 68 74 5d 3b 5c 6e 22 0a 09 20 c_height];\n"..
0370: 20 20 20 20 20 20 20 20 20 09 22 69 6e 74 20 69 ."int i
0380: 3b 5c 6e 22 0a 09 20 20 20 20 20 20 20 20 20 20 ;\n"..
0390: 09 22 5c 6e 22 0a 09 20 20 20 20 20 20 20 20 20 ."\n"..
03a0: 20 09 22 66 6f 72 20 28 69 20 3d 20 30 3b 20 69 ."for (i = 0; i
03b0: 20 3c 20 6e 63 68 61 6e 73 20 2a 20 73 72 63 5f < nchans * src_
03c0: 77 69 64 74 68 20 2a 20 73 72 63 5f 68 65 69 67 width * src_heig
03d0: 68 74 3b 20 2b 2b 69 29 5c 6e 22 0a 09 20 20 20 ht; ++i)\n"..
03e0: 20 20 20 20 20 20 20 09 22 09 63 68 61 6e 73 5b .".chans[
03f0: 69 20 25 20 6e 63 68 61 6e 73 5d 5b 69 20 2f 20 i % nchans][i /
0400: 6e 63 68 61 6e 73 5d 20 3d 20 64 61 74 61 5b 69 nchans] = data[i
0410: 5d 3b 5c 6e 22 0a 09 20 20 20 20 20 20 20 20 20 ];\n"..
0420: 20 09 22 5c 6e 22 0a 09 20 20 20 20 20 20 20 20 ."\n"..
0430: 20 20 09 22 63 64 43 61 6e 76 61 73 50 75 74 49 ."cdCanvasPutI
0440: 6d 61 67 65 52 65 63 74 52 47 42 28 5c 6e 22 0a mageRectRGB(\n".
0450: 09 20 20 20 20 20 20 20 20 20 20 09 22 09 63 61 . .".ca
0460: 6e 76 61 73 2c 20 73 72 63 5f 77 69 64 74 68 2c nvas, src_width,
0470: 20 73 72 63 5f 68 65 69 67 68 74 2c 5c 6e 22 0a src_height,\n".
0480: 09 20 20 20 20 20 20 20 20 20 20 09 22 09 63 68 . .".ch
0490: 61 6e 73 5b 30 5d 2c 20 63 68 61 6e 73 5b 31 5d ans[0], chans[1]
04a0: 2c 20 63 68 61 6e 73 5b 32 5d 2c 5c 6e 22 0a 09 , chans[2],\n"..
04b0: 20 20 20 20 20 20 20 20 20 20 09 22 09 64 73 74 .".dst
04c0: 5f 78 2c 20 64 73 74 5f 79 2c 20 64 73 74 5f 77 _x, dst_y, dst_w
04d0: 69 64 74 68 2c 20 64 73 74 5f 68 65 69 67 68 74 idth, dst_height
04e0: 2c 22 0a 09 20 20 20 20 20 20 20 20 20 20 09 22 ,".. ."
04f0: 09 73 72 63 5f 78 30 2c 20 73 72 63 5f 78 31 2c .src_x0, src_x1,
0500: 20 73 72 63 5f 79 30 2c 20 73 72 63 5f 79 31 22 src_y0, src_y1"
0510: 0a 09 20 20 20 20 20 20 20 20 20 20 09 22 29 3b .. .");
0520: 22 29 5d 29 0a 09 20 20 28 6c 61 6d 62 64 61 20 ")]).. (lambda
0530: 28 63 61 6e 76 61 73 20 64 73 74 2d 78 20 64 73 (canvas dst-x ds
0540: 74 2d 79 20 73 72 63 2d 77 69 64 74 68 20 73 72 t-y src-width sr
0550: 63 2d 68 65 69 67 68 74 20 64 61 74 61 0a 09 20 c-height data..
0560: 20 20 20 20 20 20 20 20 20 20 23 21 6b 65 79 20 #!key
0570: 5b 77 69 64 74 68 20 30 5d 20 5b 68 65 69 67 68 [width 0] [heigh
0580: 74 20 30 5d 20 5b 78 30 20 30 5d 20 5b 78 31 20 t 0] [x0 0] [x1
0590: 30 5d 20 5b 79 30 20 30 5d 20 5b 79 31 20 30 5d 0] [y0 0] [y1 0]
05a0: 29 0a 09 20 20 09 28 75 6e 6c 65 73 73 20 28 3d ).. .(unless (=
05b0: 20 28 62 6c 6f 62 2d 73 69 7a 65 20 64 61 74 61 (blob-size data
05c0: 29 20 28 2a 20 33 20 73 72 63 2d 77 69 64 74 68 ) (* 3 src-width
05d0: 20 73 72 63 2d 68 65 69 67 68 74 29 29 0a 09 20 src-height))..
05e0: 20 09 09 28 65 72 72 6f 72 20 27 63 61 6e 76 61 ..(error 'canva
05f0: 73 2d 69 6d 61 67 65 2d 73 65 74 2f 72 67 62 21 s-image-set/rgb!
0600: 20 22 62 61 64 20 69 6d 61 67 65 20 73 69 7a 65 "bad image size
0610: 22 20 28 62 6c 6f 62 2d 73 69 7a 65 20 64 61 74 " (blob-size dat
0620: 61 29 20 28 2a 20 33 20 73 72 63 2d 77 69 64 74 a) (* 3 src-widt
0630: 68 20 73 72 63 2d 68 65 69 67 68 74 29 29 29 0a h src-height))).
0640: 09 20 20 09 28 63 61 6e 76 61 73 2d 69 6d 61 67 . .(canvas-imag
0650: 65 2d 73 65 74 2f 72 67 62 2f 72 61 77 21 0a 09 e-set/rgb/raw!..
0660: 20 20 09 09 63 61 6e 76 61 73 20 64 73 74 2d 78 ..canvas dst-x
0670: 20 64 73 74 2d 79 20 73 72 63 2d 77 69 64 74 68 dst-y src-width
0680: 20 73 72 63 2d 68 65 69 67 68 74 20 64 61 74 61 src-height data
0690: 0a 09 20 20 09 09 77 69 64 74 68 20 68 65 69 67 .. ..width heig
06a0: 68 74 20 78 30 20 78 31 20 79 30 20 79 31 29 29 ht x0 x1 y0 y1))
06b0: 29 29 0a 0a 28 64 65 66 69 6e 65 20 63 61 6e 76 ))..(define canv
06c0: 61 73 2d 69 6d 61 67 65 2d 70 75 74 2f 72 67 62 as-image-put/rgb
06d0: 61 21 0a 09 28 6c 65 74 72 65 63 20 28 5b 63 61 a!..(letrec ([ca
06e0: 6e 76 61 73 2d 69 6d 61 67 65 2d 73 65 74 2f 72 nvas-image-set/r
06f0: 67 62 61 2f 72 61 77 21 0a 09 20 20 20 20 20 20 gba/raw!..
0700: 20 20 20 20 28 66 6f 72 65 69 67 6e 2d 6c 61 6d (foreign-lam
0710: 62 64 61 2a 20 76 6f 69 64 20 28 5b 6e 6f 6e 6e bda* void ([nonn
0720: 75 6c 6c 2d 63 61 6e 76 61 73 20 63 61 6e 76 61 ull-canvas canva
0730: 73 5d 20 5b 69 6e 74 20 64 73 74 5f 78 5d 20 5b s] [int dst_x] [
0740: 69 6e 74 20 64 73 74 5f 79 5d 0a 09 20 20 20 20 int dst_y]..
0750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0760: 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 69 6e [in
0770: 74 20 73 72 63 5f 77 69 64 74 68 5d 20 5b 69 6e t src_width] [in
0780: 74 20 73 72 63 5f 68 65 69 67 68 74 5d 20 5b 6e t src_height] [n
0790: 6f 6e 6e 75 6c 6c 2d 62 6c 6f 62 20 64 61 74 61 onnull-blob data
07a0: 5d 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 ]..
07b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
07c0: 20 20 20 20 5b 69 6e 74 20 64 73 74 5f 77 69 64 [int dst_wid
07d0: 74 68 5d 20 5b 69 6e 74 20 64 73 74 5f 68 65 69 th] [int dst_hei
07e0: 67 68 74 5d 0a 09 20 20 20 20 20 20 20 20 20 20 ght]..
07f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0800: 20 20 20 20 20 20 20 5b 69 6e 74 20 73 72 63 5f [int src_
0810: 78 30 5d 20 5b 69 6e 74 20 73 72 63 5f 78 31 5d x0] [int src_x1]
0820: 20 5b 69 6e 74 20 73 72 63 5f 79 30 5d 20 5b 69 [int src_y0] [i
0830: 6e 74 20 73 72 63 5f 79 31 5d 29 0a 09 20 20 20 nt src_y1])..
0840: 20 20 20 20 20 20 20 20 20 22 63 6f 6e 73 74 20 "const
0850: 69 6e 74 20 6e 63 68 61 6e 73 20 3d 20 34 3b 5c int nchans = 4;\
0860: 6e 22 0a 09 20 20 20 20 20 20 20 20 20 20 09 22 n".. ."
0870: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 63 68 unsigned char ch
0880: 61 6e 73 5b 6e 63 68 61 6e 73 5d 5b 73 72 63 5f ans[nchans][src_
0890: 77 69 64 74 68 20 2a 20 73 72 63 5f 68 65 69 67 width * src_heig
08a0: 68 74 5d 3b 5c 6e 22 0a 09 20 20 20 20 20 20 20 ht];\n"..
08b0: 20 20 20 09 22 69 6e 74 20 69 3b 5c 6e 22 0a 09 ."int i;\n"..
08c0: 20 20 20 20 20 20 20 20 20 20 09 22 5c 6e 22 0a ."\n".
08d0: 09 20 20 20 20 20 20 20 20 20 20 09 22 66 6f 72 . ."for
08e0: 20 28 69 20 3d 20 30 3b 20 69 20 3c 20 6e 63 68 (i = 0; i < nch
08f0: 61 6e 73 20 2a 20 73 72 63 5f 77 69 64 74 68 20 ans * src_width
0900: 2a 20 73 72 63 5f 68 65 69 67 68 74 3b 20 2b 2b * src_height; ++
0910: 69 29 5c 6e 22 0a 09 20 20 20 20 20 20 20 20 20 i)\n"..
0920: 20 09 22 09 63 68 61 6e 73 5b 69 20 25 20 6e 63 .".chans[i % nc
0930: 68 61 6e 73 5d 5b 69 20 2f 20 6e 63 68 61 6e 73 hans][i / nchans
0940: 5d 20 3d 20 64 61 74 61 5b 69 5d 3b 5c 6e 22 0a ] = data[i];\n".
0950: 09 20 20 20 20 20 20 20 20 20 20 09 22 5c 6e 22 . ."\n"
0960: 0a 09 20 20 20 20 20 20 20 20 20 20 09 22 63 64 .. ."cd
0970: 43 61 6e 76 61 73 50 75 74 49 6d 61 67 65 52 65 CanvasPutImageRe
0980: 63 74 52 47 42 41 28 5c 6e 22 0a 09 20 20 20 20 ctRGBA(\n"..
0990: 20 20 20 20 20 20 09 22 09 63 61 6e 76 61 73 2c .".canvas,
09a0: 20 73 72 63 5f 77 69 64 74 68 2c 20 73 72 63 5f src_width, src_
09b0: 68 65 69 67 68 74 2c 5c 6e 22 0a 09 20 20 20 20 height,\n"..
09c0: 20 20 20 20 20 20 09 22 09 63 68 61 6e 73 5b 30 .".chans[0
09d0: 5d 2c 20 63 68 61 6e 73 5b 31 5d 2c 20 63 68 61 ], chans[1], cha
09e0: 6e 73 5b 32 5d 2c 20 63 68 61 6e 73 5b 33 5d 2c ns[2], chans[3],
09f0: 5c 6e 22 0a 09 20 20 20 20 20 20 20 20 20 20 09 \n".. .
0a00: 22 09 64 73 74 5f 78 2c 20 64 73 74 5f 79 2c 20 ".dst_x, dst_y,
0a10: 64 73 74 5f 77 69 64 74 68 2c 20 64 73 74 5f 68 dst_width, dst_h
0a20: 65 69 67 68 74 2c 22 0a 09 20 20 20 20 20 20 20 eight,"..
0a30: 20 20 20 09 22 09 73 72 63 5f 78 30 2c 20 73 72 .".src_x0, sr
0a40: 63 5f 78 31 2c 20 73 72 63 5f 79 30 2c 20 73 72 c_x1, src_y0, sr
0a50: 63 5f 79 31 22 0a 09 20 20 20 20 20 20 20 20 20 c_y1"..
0a60: 20 09 22 29 3b 22 29 5d 29 0a 09 20 20 28 6c 61 .");")]).. (la
0a70: 6d 62 64 61 20 28 63 61 6e 76 61 73 20 64 73 74 mbda (canvas dst
0a80: 2d 78 20 64 73 74 2d 79 20 73 72 63 2d 77 69 64 -x dst-y src-wid
0a90: 74 68 20 73 72 63 2d 68 65 69 67 68 74 20 64 61 th src-height da
0aa0: 74 61 0a 09 20 20 20 20 20 20 20 20 20 20 20 23 ta.. #
0ab0: 21 6b 65 79 20 5b 77 69 64 74 68 20 30 5d 20 5b !key [width 0] [
0ac0: 68 65 69 67 68 74 20 30 5d 20 5b 78 30 20 30 5d height 0] [x0 0]
0ad0: 20 5b 78 31 20 30 5d 20 5b 79 30 20 30 5d 20 5b [x1 0] [y0 0] [
0ae0: 79 31 20 30 5d 29 0a 09 20 20 09 28 75 6e 6c 65 y1 0]).. .(unle
0af0: 73 73 20 28 3d 20 28 62 6c 6f 62 2d 73 69 7a 65 ss (= (blob-size
0b00: 20 64 61 74 61 29 20 28 2a 20 34 20 73 72 63 2d data) (* 4 src-
0b10: 77 69 64 74 68 20 73 72 63 2d 68 65 69 67 68 74 width src-height
0b20: 29 29 0a 09 20 20 09 09 28 65 72 72 6f 72 20 27 )).. ..(error '
0b30: 63 61 6e 76 61 73 2d 69 6d 61 67 65 2d 73 65 74 canvas-image-set
0b40: 2f 72 67 62 61 21 20 22 62 61 64 20 69 6d 61 67 /rgba! "bad imag
0b50: 65 20 73 69 7a 65 22 20 28 62 6c 6f 62 2d 73 69 e size" (blob-si
0b60: 7a 65 20 64 61 74 61 29 20 28 2a 20 34 20 73 72 ze data) (* 4 sr
0b70: 63 2d 77 69 64 74 68 20 73 72 63 2d 68 65 69 67 c-width src-heig
0b80: 68 74 29 29 29 0a 09 20 20 09 28 63 61 6e 76 61 ht))).. .(canva
0b90: 73 2d 69 6d 61 67 65 2d 73 65 74 2f 72 67 62 61 s-image-set/rgba
0ba0: 2f 72 61 77 21 0a 09 20 20 09 09 63 61 6e 76 61 /raw!.. ..canva
0bb0: 73 20 64 73 74 2d 78 20 64 73 74 2d 79 20 73 72 s dst-x dst-y sr
0bc0: 63 2d 77 69 64 74 68 20 73 72 63 2d 68 65 69 67 c-width src-heig
0bd0: 68 74 20 64 61 74 61 0a 09 20 20 09 09 77 69 64 ht data.. ..wid
0be0: 74 68 20 68 65 69 67 68 74 20 78 30 20 78 31 20 th height x0 x1
0bf0: 79 30 20 79 31 29 29 29 29 0a 0a 28 64 65 66 69 y0 y1))))..(defi
0c00: 6e 65 20 63 61 6e 76 61 73 2d 69 6d 61 67 65 2f ne canvas-image/
0c10: 72 67 62 0a 09 28 67 65 74 74 65 72 2d 77 69 74 rgb..(getter-wit
0c20: 68 2d 73 65 74 74 65 72 0a 09 09 28 6c 65 74 72 h-setter...(letr
0c30: 65 63 20 28 5b 63 61 6e 76 61 73 2d 69 6d 61 67 ec ([canvas-imag
0c40: 65 2f 72 67 62 2f 72 61 77 0a 09 09 09 09 09 09 e/rgb/raw.......
0c50: 09 28 66 6f 72 65 69 67 6e 2d 6c 61 6d 62 64 61 .(foreign-lambda
0c60: 2a 20 76 6f 69 64 20 28 5b 6e 6f 6e 6e 75 6c 6c * void ([nonnull
0c70: 2d 63 61 6e 76 61 73 20 63 61 6e 76 61 73 5d 20 -canvas canvas]
0c80: 5b 69 6e 74 20 78 5d 20 5b 69 6e 74 20 79 5d 0a [int x] [int y].
0c90: 09 09 09 09 09 09 09 20 20 20 20 20 20 20 20 20 .......
0ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 69 [i
0cb0: 6e 74 20 77 69 64 74 68 5d 20 5b 69 6e 74 20 68 nt width] [int h
0cc0: 65 69 67 68 74 5d 20 20 5b 6e 6f 6e 6e 75 6c 6c eight] [nonnull
0cd0: 2d 62 6c 6f 62 20 64 61 74 61 5d 29 0a 09 09 09 -blob data])....
0ce0: 09 09 09 09 20 20 22 63 6f 6e 73 74 20 69 6e 74 .... "const int
0cf0: 20 6e 63 68 61 6e 73 20 3d 20 33 3b 5c 6e 22 0a nchans = 3;\n".
0d00: 09 09 09 09 09 09 09 20 20 22 75 6e 73 69 67 6e ....... "unsign
0d10: 65 64 20 63 68 61 72 20 63 68 61 6e 73 5b 6e 63 ed char chans[nc
0d20: 68 61 6e 73 5d 5b 77 69 64 74 68 20 2a 20 68 65 hans][width * he
0d30: 69 67 68 74 5d 3b 5c 6e 22 0a 09 09 09 09 09 09 ight];\n".......
0d40: 09 20 20 22 69 6e 74 20 69 3b 5c 6e 22 0a 09 09 . "int i;\n"...
0d50: 09 09 09 09 09 20 20 22 5c 6e 22 0a 09 09 09 09 ..... "\n".....
0d60: 09 09 09 20 20 22 63 64 43 61 6e 76 61 73 47 65 ... "cdCanvasGe
0d70: 74 49 6d 61 67 65 52 47 42 28 5c 6e 22 0a 09 09 tImageRGB(\n"...
0d80: 09 09 09 09 09 20 20 22 09 63 61 6e 76 61 73 2c ..... ".canvas,
0d90: 5c 6e 22 0a 09 09 09 09 09 09 09 20 20 22 09 63 \n"........ ".c
0da0: 68 61 6e 73 5b 30 5d 2c 20 63 68 61 6e 73 5b 31 hans[0], chans[1
0db0: 5d 2c 20 63 68 61 6e 73 5b 32 5d 2c 5c 6e 22 0a ], chans[2],\n".
0dc0: 09 09 09 09 09 09 09 20 20 22 09 78 2c 20 79 2c ....... ".x, y,
0dd0: 20 77 69 64 74 68 2c 20 68 65 69 67 68 74 5c 6e width, height\n
0de0: 22 0a 09 09 09 09 09 09 09 20 20 22 29 3b 5c 6e "........ ");\n
0df0: 22 0a 09 09 09 09 09 09 09 20 20 22 5c 6e 22 0a "........ "\n".
0e00: 09 09 09 09 09 09 09 20 20 22 66 6f 72 20 28 69 ....... "for (i
0e10: 20 3d 20 30 3b 20 69 20 3c 20 6e 63 68 61 6e 73 = 0; i < nchans
0e20: 20 2a 20 77 69 64 74 68 20 2a 20 68 65 69 67 68 * width * heigh
0e30: 74 3b 20 2b 2b 69 29 5c 6e 22 0a 09 09 09 09 09 t; ++i)\n"......
0e40: 09 09 20 20 22 09 64 61 74 61 5b 69 5d 20 3d 20 .. ".data[i] =
0e50: 63 68 61 6e 73 5b 69 20 25 20 6e 63 68 61 6e 73 chans[i % nchans
0e60: 5d 5b 69 20 2f 20 6e 63 68 61 6e 73 5d 3b 5c 6e ][i / nchans];\n
0e70: 22 29 5d 29 0a 09 09 09 28 6c 61 6d 62 64 61 20 ")])....(lambda
0e80: 28 63 61 6e 76 61 73 20 78 20 79 20 77 69 64 74 (canvas x y widt
0e90: 68 20 68 65 69 67 68 74 29 0a 09 09 09 09 28 6c h height).....(l
0ea0: 65 74 20 28 5b 64 61 74 61 20 28 6d 61 6b 65 2d et ([data (make-
0eb0: 62 6c 6f 62 20 28 2a 20 33 20 77 69 64 74 68 20 blob (* 3 width
0ec0: 68 65 69 67 68 74 29 29 5d 29 0a 09 09 09 09 09 height))])......
0ed0: 28 63 61 6e 76 61 73 2d 69 6d 61 67 65 2f 72 67 (canvas-image/rg
0ee0: 62 2f 72 61 77 20 63 61 6e 76 61 73 20 78 20 79 b/raw canvas x y
0ef0: 20 77 69 64 74 68 20 68 65 69 67 68 74 20 64 61 width height da
0f00: 74 61 29 0a 09 09 09 09 09 64 61 74 61 29 29 29 ta)......data)))
0f10: 0a 09 09 63 61 6e 76 61 73 2d 69 6d 61 67 65 2d ...canvas-image-
0f20: 70 75 74 2f 72 67 62 21 29 29 0a 0a 3b 3b 20 7d put/rgb!))..;; }
0f30: 7d 7d 0a }}.