2007年6月25日月曜日

塗り絵自動生成

Rubyをいじりつつ「HSPの時はどんなスクリプトからはじめたっけ?」と思い出したものを再現。画像の輪郭を縁取って塗り絵を作るスクリプト。
同じ事をRubyでやるのは(たぶん)大変だし、HSPのグラフィックの使いやすさは高いと思う。最近自分の中では「オブジェクトをあまり使わないGUIアプリならHSP」で固定されつつある。

画像によっては勝手にredraw 1されてしまう模様。未知の不具合?
#const BORDER 30 // 閾値

*loadPicture
    dialog "bmp;*.jpg;*.gif"16
    if stat == 0 : end

    picName = refstr
    picload picName
    picWidth = ginfo_winx
    picHeight = ginfo_winy
    buffer 1, picWidth, picHeight, SCREEN_PALETTE
    repeat 255
        palette cntcntcntcnt0
    loop
    palette 2552552552551
    gcopy 000, picWidth, picHeight

*valueInit
    dim dx, 4 : dim dy, 4
    dx = 01,  0, -1
    dy = 10, -1,  0

*main
    gsel 0
    title "変換中…" : redraw 0
    color 255255255 : boxf
    color
    repeat picHeight
        y = cnt
        repeat picWidth
            x = cnt

            count = 0 : dValue = 0
            gsel 1 : pget x, y
            col = ginfo_r
            repeat 4
                if (0 <= x + dx(cnt))&(x + dx(cnt) < picWidth)&(0 <= y + dy(cnt))&(y + dy(cnt) < picHeight) {
                    pget x + dx(cnt), y + dy(cnt)
                    count++
                    dValue += abs(col - ginfo_r)
                }
            loop
            if (dValue > BORDER * count) {
                gsel 0 : pset x, y
            }

        loop
        await 1
    loop
    gsel 0 : redraw 1
    title "変換終了!"
    stop

1 件のコメント:

y.tack さんのコメント...

ellerさんこんにちは
レスポンス・ナンバー・44ことリノシヨことりすとです

>HSPのグラフィックの使いやすさは高いと思う。
>最近自分の中では「オブジェクトをあまり使わないGUIアプリならHSP」で
>固定されつつある。

僕も手軽なGUI操作でHSPやってます
やっぱそうですよね

>電卓は昔からの難題で、最近ようやく実装方法が分かってきました。
>……再帰も好きなのかな?

1,電卓を作る
2,”(”と”)”の処理を加える
3,関数電卓を作る
4,変数の処理を加える
5、etc

のような処理の連続がインタプリタを作る手順のようです
僕が開発wikiで”文字列を置き換えてコードを生成しよう”
という処理をやってるのも
究極的にはインタプリタの処理に近づくかもしれません

そのようななことがこんな本に書いてあります
「いまどきのプログラム言語の作り方」randy 著
amazonのキーワードでググってください

最近はコメントにもうちょっと勉強すれ的なことを書いてたので
勉強中ですが、いつか再開したいです

ellerさんには色々やってもらって申し訳ないですが
いまのところ、しばらく中断というかんじです
ご容赦ください