HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0701
hoge画像のドットをランダムに入れ替えるプログラムについて2解決


hoge

リンク

2015/7/1(Wed) 17:23:37|NO.69920

別のページ(http://hsp.tv/play/pforum.php?mode=pastwch&num=61218)に載ってた奴だけど、今更ながらソースを解析したので報告。
乱数のシードが同じなら、変換処理も逆変換処理も同じようにできるというのが秀逸。

#const kButtonY 30 ;ボタンのYサイズ // 画像を読み込む title "ImageEncode/Decode" dialog "*", 16, "*" if(stat == 0) :end picload refstr px = ginfo(12) :py = ginfo(13) // (0, 0)のRGB値からseedを作成する // 例えば#(123, 45, 67)の場合、seed = 123045067となる pget 0, 0 seed = ginfo_r * 1000000 + ginfo_g * 1000 + ginfo_b randomize seed // GUIを作成する // (元画像の上60ピクセルが隠れてしまうことに注意) objsize px, kButtonY pos 0, 0 button goto "変換", *encode pos 0, kButtonY button goto "逆変換", *decode stop *encode // 変換処理 for y, py - 1, 0, -1 for x, px - 1, 0, -1 p = rnd(x + 1) q = rnd(y + 1) // 座標(x, y)と(p , q)の色を入れ替える // ただし(0, 0)の点は選択しないようにする if(x + y == 0) :_continue if(p + q == 0) :_continue pget p, q r = ginfo_r g = ginfo_g b = ginfo_b pget x, y pset p, q color r, g, b pset x, y next next clrobj bmpsave "" + refstr + ".bmp" end *decode // pic1に変換された画像を代入する dim pic1, px, py for y, 0, py for x, 0, px pget x, y r = ginfo_r g = ginfo_g b = ginfo_b pic1(x, y) = r * 1000000 + g * 1000 + b next next // pic2に画像の逆変換先X・Y座標を代入する dim pic2, px, py, 2 for y, 0, py for x, 0, px pic2(x, y, 0) = x pic2(x, y, 1) = y next next // 逆変換処理 for y, py - 1, 0, -1 for x, px - 1, 0, -1 p = rnd(x + 1) q = rnd(y + 1) // 座標(x, y)と(p , q)におけるpic2の値を入れ替える // ただし(0, 0)の点は選択しないようにする if(x + y == 0) :_continue if(p + q == 0) :_continue temp = pic2(x, y, 0) pic2(x, y, 0) = pic2(p, q, 0) pic2(p, q, 0) = temp temp = pic2(x, y, 1) pic2(x, y, 1) = pic2(p, q, 1) pic2(p, q, 1) = temp next next // 結果を出力する for y, 0, py for x, 0, px color pic1(x, y) / 1000000, pic1(x, y) \ 1000000 / 1000, pic1(x, y) \ 1000000 \ 1000 pset pic2(x, y, 0), pic2(x, y, 1) next next clrobj bmpsave "" + refstr + ".bmp" end



この記事に返信する


kanamaru

リンク

2015/7/1(Wed) 17:48:58|NO.69921

このスレッドを立てた人と、
プログラムの作成者の名前が異なるのですが、
僕が個人的に気になった所を書いておくと、
最後から2行目のbmpsaveに行は、

path = refstr bmpsave ""+getpath(path,1)+".bmp"
という風にしたほうがいいと思います。
僕がpngを変換して作成した画像のファイル名が
.png.bmpとなっていて、二重拡張子となっていてあまりよくありません。
それと、5行目のファイルを選択するダイアログが
すべての形式が選択できるのも気になります。
画像形式のみを選択できるようにしないと、
7行目でエラーを起こしかねないので。
dialog "bmp|jpg|gif|jpeg|ico",16,"bmp ファイル"
とすればいいと思います。



kanamaru

リンク

2015/7/1(Wed) 17:53:39|NO.69923

<pre>
を閉じるのを忘れていたようです。
すいませんでした。



ONION software Copyright 1997-2021(c) All rights reserved.