Makoto Satoh
makot****@yahoo*****
2005年 4月 15日 (金) 17:02:18 JST
さとうです。 昨日から、GD2バインディングに挑戦してます。 <gd>のcreate/destroy/initializeができた程度ですが。 これから、それぞれの関数をバインドしていこうと思っていますが、 初手からつまずいています。 GD2では、イメージオブジェクトに対して描画命令を出していって、 最終的にファイルに書き出すわけですが、この部分はどのように 実装すべきでしょうか? Scheme側で作ったファイルポートを受け取り、そこへイメージ データを書き出すようにすると使いやすいのかなと思っていますが。 Cでは、 gdImagePtr im; FILE *out; im = gdImageCreate(100, 100); ....(描画命令).... out = fopen("test.png", "wb"); gdImagePng(im, out); fclose(out); のように書きます。 Schemeでは、 (call-with-output-file "test.png" (lambda (p) (gd-image-png imageobj p))) というのが直接的なマッピングになりますでしょうか? この場合、gd-image-pngはポートpを受け取らなければなりませんが、 そういう場合はdefine-cprocの中ではどのようにpを受け取って、 Cコードの中ではどのようにファイルポインタに(?)するのでしょうか? あるいは、 (gd-image-png imageobj "test.png") のようにファイル名を受け取って、define-cprocの中でFILE*を作る ほうが良いでしょうか? Schemeコード上の自然さとdefine-cprocでの受け取り方を教えて いただけますか? Gauche-0.8.3/extの中には外からSchemeポートを受け取るようなものは ないですよね? gdbm.stubがファイル名を受け取って中で開いているのは 読みました。これは後者ですね。 また、GDではイメージオブジェクトに対して描画命令を与えていくので、 Cでは副作用ばかりな感じになってしまいますが、Scheme手続きは 都度イメージオブジェクトを返すようにしたほうが良いでしょうか? 質問ばかりですみません。よろしくお願いします。