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


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0701
MillkeyWeler掲示板をみててなんとなく作ってみた無駄なスクリプト。9解決


MillkeyWeler

リンク

2012/7/1(Sun) 03:02:21|NO.47448

本当に暇つぶしなスクリプトなどです。掲示板をみててなんとなく作ってみたものです。
公開されているスクリプトについては、ご自由に改変・利用していただいてかまいません。
(ただし、正確・確実などは保障いたしません。)

※第一弾は、timerモジュールです。
[timer]モジュール [掲示板No.47375の時に作成]

#module #define system_time (gettime(4)*60*60*1000)+(gettime(5)*60*1000)+(gettime(6)*1000)+gettime(7) #define cycletime 86400000;←ms 秒単位の周期で日付カウントを加算する。1000 で指定すると 1秒って意味。 #deffunc timer_reset // [(0)システム時刻 (1)日付カウント (2)開始時刻 (3)最終時刻 (4)オーバーフロー] , [(0)〜(255) タイマー番号] dim _time_counter,5,256 time_rflag=1 return #defcfunc timer int _p1,int _p2 if time_rflag=0 : timer_reset //タイマー番号内初期化 if _p2=0{ _time_counter(0,_p1)=system_time _time_counter(1,_p1)=0 _time_counter(2,_p1)=_time_counter(0,_p1) _time_counter(3,_p1)=_time_counter(0,_p1) return 0 } //現タイマー取得 _time_counter(0,_p1)=system_time if (_time_counter(3,_p1)>_time_counter(0,_p1)){ _time_counter(3,_p1)=0 _time_counter(4,_p1)+(cycletime-_time_counter(2,_p1)) _time_counter(2,_p1)=0 } _active_time=(-_time_counter(2,_p1)+_time_counter(0,p1))+(_time_counter(4,_p1)) if _active_time>=cycletime{ _time_counter(1,_p1)+ _time_counter(2,_p1)=_time_counter(0,_p1)+(-(_active_time-cycletime)) _time_counter(4,_p1)=0 _active_time-cycletime } _time_counter(3,_p1)=_time_counter(0,_p1) return _active_time #defcfunc timegetdate int _p1 return _time_counter(1,_p1) #global // val=timer(_p1,_p2) : _p1=タイマー番号 : _p2=0(初期化) or 1(タイマー取得) : 戻り値=カウント数値 // val=timegetdate(_p1) : _p1=タイマー番号 : 戻り値=日付カウント数値 time=timer(0,0) // タイマー番号 0 初期化 repeat await 50 time=timer(0,1) // タイマー番号 0 の現在のカウントを取得 redraw 0 color 255,255,255 : boxf 0,0,800,60 : color 0,0,0 pos 0,0 mes "カウンタ時刻 [ "+strf("%08d",time)+" ]" mes "日付加算カウント [ "+strf("%04d",timegetdate(0))+" ]" redraw 1 loop



この記事に返信する


MillkeyWeler

リンク

2012/7/6(Fri) 01:11:37|NO.47520

※第二段は、画像比較モジュールです。
[PicChecker]モジュール [掲示板NO.47028の回答者さんのを改良]

追記修正 - 2012/07/06 : スクリプトの見直しで、スクリプトを差し替えしています。


#module ;############################## ; ※module 注意事項 ; このモジュールは、bufferウィンドウ を自動確保します。自動確保されたウィンドウIDは、モジュール外で使えません。 ; (実際には使えますが、画像をロードさせる為、強制的に画面内の内容は初期化されます。) ;############################## #deffunc PicChecker int _p1,int _p2 gsel _p1 : mref main_vram,66 : sx_a=ginfo(12) : sy_a=ginfo(13) gsel _p2 : mref sub_vram ,66 : sx_b=ginfo(12) : sy_b=ginfo(13) if (sx_a!sx_b)or(sy_a!sy_b) : dialog "サイズが不一致です" : return -1 vram_size=((sx_a*sy_a)*3+((sx_a\4)*sy_a)) //VRAM 変数の最大バイト plus=sx_a\4 //VRAM の余り用 one_line=sx_a*3+plus //VRAM Xサイズ vram_size2=sx_a*sy_a _val_a=0 : _val_b=0 ok_count=0.0 repeat vram_size2 index=vram_size cx_calc=cnt\sx_a cy_calc=cnt/sx_a index-((one_line*cy_calc)-(-(sx_a*3-one_line)-one_line)) index+(cx_calc*3)-plus memcpy _val_a,main_vram,3,0,index memcpy _val_b,sub_vram ,3,0,index if _val_a=_val_b : ok_count+1.0 loop return double(double(ok_count)/double(vram_size2)*100.00) #global dialog "bmp;*.jpg", 16, "比較元画像" if stat == 0 : end mfile_a=refstr dialog "bmp;*.jpg", 16, "比較先画像" if stat == 0 : end mfile_b=refstr PicChecker mfile_a,mfile_b dialog ""+refdval+" % 一致しています。",0,"画像比較 - stat : "+stat



MillkeyWeler

リンク

2012/7/9(Mon) 00:32:44|NO.47558

タイマーモジュールのところにバグがありましたので、利用してる方はスクリプトの追加をお願いします。


//タイマー番号内初期化 if _p2=0{ _time_counter(0,_p1)=system_time _time_counter(1,_p1)=0 _time_counter(2,_p1)=_time_counter(0,_p1) _time_counter(3,_p1)=_time_counter(0,_p1) return 0 }
の所を、

//タイマー番号内初期化 if _p2=0{ _time_counter(0,_p1)=system_time _time_counter(1,_p1)=0 _time_counter(2,_p1)=_time_counter(0,_p1) _time_counter(3,_p1)=_time_counter(0,_p1) _time_counter(4,_p1)=0 return 0 }
にしてください。
ご迷惑をおかけし申し訳ございません。



匿名希望かもしれません(´・ω・`)

リンク

2012/7/9(Mon) 08:54:30|NO.47559

画像比較のソースを実行すると41行目で「パラメータの型が違います」とエラーがでます。環境のせいでしょうか?



Dangerous scripts

リンク

2012/7/9(Mon) 19:19:44|NO.47570

匿名希望かもしれません(´・ω・`)さん
私の環境でも「パラメータの型が違います」に、なりました。(・ω・")

環境
WinXP SP3
メモリー:約1G (256M×4)



ぐぐってもなにがなんだか(´Д`)@初心者

リンク

2012/7/9(Mon) 19:34:31|NO.47571

今度は8行目でエラーがでます(´・ω・`)



MillkeyWeler

リンク

2012/7/9(Mon) 19:38:01|NO.47572

申し訳ございません。DLL 版を作ってたときのままでした。
修正版はこちらです。

#module ;############################## ; ※module 注意事項 ; このモジュールは、bufferウィンドウ を自動確保します。自動確保されたウィンドウIDは、モジュール外で使えません。 ; (実際には使えますが、画像をロードさせる為、強制的に画面内の内容は初期化されます。) ;############################## #deffunc PicChecker int _p1,int _p2 gsel _p1 : mref main_vram,66 : sx_a=ginfo(12) : sy_a=ginfo(13) gsel _p2 : mref sub_vram ,66 : sx_b=ginfo(12) : sy_b=ginfo(13) if (sx_a!sx_b)or(sy_a!sy_b) : dialog "サイズが不一致です" : return -1 vram_size=((sx_a*sy_a)*3+((sx_a\4)*sy_a)) //VRAM 変数の最大バイト plus=sx_a\4 //VRAM の余り用 one_line=sx_a*3+plus //VRAM Xサイズ vram_size2=sx_a*sy_a _val_a=0 : _val_b=0 ok_count=0.0 repeat vram_size2 index=vram_size cx_calc=cnt\sx_a cy_calc=cnt/sx_a index-((one_line*cy_calc)-(-(sx_a*3-one_line)-one_line)) index+(cx_calc*3)-plus memcpy _val_a,main_vram,3,0,index memcpy _val_b,sub_vram ,3,0,index if _val_a=_val_b : ok_count+1.0 loop return double(double(ok_count)/double(vram_size2)*100.00) #global dialog "bmp;*.jpg", 16, "比較元画像" if stat == 0 : end mfile_a=refstr dialog "bmp;*.jpg", 16, "比較先画像" if stat == 0 : end mfile_b=refstr screen 0 : picload mfile_a screen 4 : picload mfile_b PicChecker 0,4 dialog ""+refdval+" % 一致しています。",0,"画像比較 - stat : "+stat



MillkeyWeler

リンク

2012/7/9(Mon) 19:45:51|NO.47573

8行目のエラーに関して、初期化されてないウィンドウID を引数に指定すると、エラーとなります。
これは、HSP の仕様となりますので、正常な動作となります。



KA

リンク

2012/7/9(Mon) 20:04:29|NO.47574

暇つぶしなスクリプトを、暇つぶしに見ていました。

画像の比較を見ていて、「バイナリ比較の方が速いのでは」と
暇つぶしに考えました。全く同じデータを調べているような。

1:JPGは、元が同じでもソフトや設定によって画質が異なる。
2:色数が、16ビットと24ビット間で比較できるのか。

比較するのであれば減色縮小を行い、色の分布や頻度等を標本化
し、統計的な近似具合を調べないとダメな様な気がします。

まあ、暇つぶしの無駄なスクリプトに、そこまで要求するのも酷か
なと、煽ったり煽らなかったり。

暇つぶしの戯言なので、聞き流して下さい。



MillkeyWeler

リンク

2012/7/9(Mon) 20:24:41|NO.47576

KA さん、暇つぶしに見に来てくれてありがとうございます。

>>画像の比較を見ていて、「バイナリ比較の方が速いのでは」と暇つぶしに考えました。全く同じデータを調べているような。
完全に比較する場合は、VRAM 領域をすべて見るので

gsel _p1 : mref main_vram,66 gsel _p2 : mref sub_vram,66 vram_size=((sx_a*sy_a)*3+((sx_a\4)*sy_a)) //VRAM 変数の最大バイト ok_count=0.0 repeat vram_size if (peek(main_vram,cnt)=peek(sub_vram,cnt)) : ok_count+1.0 loop
でいいんですけどね。

>>1:JPGは、元が同じでもソフトや設定によって画質が異なる。
>>2:色数が、16ビットと24ビット間で比較できるのか。
については、んー、うちの作ってるのは、完璧に同じ色で比較するのものだからどーなんだろう。
(類似比較については、まぁ使う機会があれば作りますけど・・・というか、類似比較は、cvmatch ですでに実装されてますね。)

まぁ、見てくれた方がスクリプトを改良なりして、使ってくれる方の思い通りになるようになってくれたらいいかなーっと。



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