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 件のコメント:

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

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

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

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

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

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

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

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

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

    返信削除