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


HSPTV!掲示板


未解決 解決 停止 削除要請

2018
0321
ゆーpgetとpsetについて8解決


ゆー

リンク

2018/3/21(Wed) 15:26:56|NO.82791

pgetとpsetを使ってみたのですが、
画像ファイルを選択してから、画像が表示されるまで2秒ぐらいかかります。
何故でしょうか?

dialog "",16 if stat=0:end fileimage=refstr buffer 1 picload fileimage xsize=ginfo_winx ysize=ginfo_winy screen 0,xsize,ysize gsel 1 gsel 0:redraw 0 repeat ysize gsel 1 ycnt=cnt repeat xsize pget cnt,ycnt 赤(cnt)=ginfo_r:緑(cnt)=ginfo_g:青(cnt)=ginfo_b loop gsel 0 repeat xsize color 赤(cnt),緑(cnt),青(cnt) pset cnt,ycnt loop loop redraw 1



この記事に返信する


あまら

リンク

2018/3/21(Wed) 15:52:10|NO.82792

単純に1ドットずつ処理をする事に時間がかかるからです。

例えていうのならば、豆を一個ずつ拾う(pget)・置く(pset)とするよりも
豆の入った器を移動させる(gcopy等)方が早い、といった感じでしょうか。


ドット単位での処理ならVramデータにpeek・pokeでアクセスする方が速いです。
それでもやはりgcopy等の方が高速ですが。。。



minasoft

リンク

2018/3/27(Tue) 11:42:58|NO.82827

実行してみましたが、このスクリプトはたった2行にできますよ。
2行にすると、こうなります。

dialog "",16 picload refstr



ゆー

リンク

2018/3/27(Tue) 18:36:09|NO.82847

>ドット単位での処理ならVramデータにpeek・pokeでアクセスする方が速いです。
どうやるのですか?
できれば、スクリプトを載せてもらうと幸いです。



あまら

リンク

2018/3/27(Tue) 19:20:11|NO.82849

ゆーさんのソースを元にpeek,pokeバージョンにしてみました。


dialog "",16 if stat=0:end fileimage=refstr buffer 1 picload fileimage xsize=ginfo_winx ysize=ginfo_winy screen 0,xsize,ysize gsel 1 gsel 0:redraw 0 mref vram0, 66; gsel 1; mref vram1, 66; vwidth = ( (xsize*3) + 3 ) & 0xFFFFFFFC; repeat ysize index_h = cnt * vwidth; repeat xsize index = cnt*3 + index_h; poke vram0, index, peek(vram1, index); // B poke vram0, index+1, peek(vram1, index+1); // G poke vram0, index+2, peek(vram1, index+2); // R loop loop gsel 0:redraw 1
mrefでそれぞれのウィンドウやバッファのVRAMにアクセスできるようにして
あとは1ドットずつ読み込み(peek)と書き込み(poke)を同時にやってるだけです。

vwidth = ( (xsize*3) + 3 ) & 0xFFFFFFFC;
この計算はメモリー上での画像横幅を算出しています。

VRAMに関しての詳しい説明は検索すると色々出て来ると思うので
細かい解説は省略しようと思ったのですが
wikiの解説が比較的簡単で詳しく書いてあるのでリンクを貼っておきます。
https://wiki.hsp.moe/%E5%B0%8F%E3%83%AF%E3%82%B6%EF%BC%8FVRAM%E3%82%92%E7%9B%B4%E6%8E%A5%E6%93%8D%E4%BD%9C%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B.html



ゆー

リンク

2018/3/27(Tue) 20:05:06|NO.82850

pokeとpeekを使えば良かったんですね。
画像の表示は早いのに、何故pgetとpsetでは遅いのか気になりました。
ありがとうございます。



中村実

リンク

2018/4/8(Sun) 19:43:33|NO.83941

なぜ1dot単位で処理をするのですか?
1dotにする利点などはありますか?



あらや(旧名あまら)

リンク

2018/4/8(Sun) 20:09:58|NO.83946

>中村実さん
ゆーさんが何を目的にやっているのかはわかりませんが
1ドット単位の処理は主に画像加工などで使えます。

・画像をセピア調やグレースケールにする色調補正系
・モザイク処理
・ぼかし、シャープ
・特定色の選択や書き換え
・画像の拡大、縮小、回転、ゆがみ加工
などなど

これらの内いくつかは標準命令を工夫するなどで可能ですが
標準命令とは違ったアルゴリズムで実行することで
精度が上がったりするという効果も期待できます。

このスレッドにあるソースがただの画像コピーのために利点が無さそうですが
独自の画像形式で保存・読込なんかも可能になりますし
なんらかのデータを画像形式に見せかけて保存するとか
ドット単位の処理をすることで色々と応用ができますよ。



中村実

リンク

2018/4/9(Mon) 21:00:24|NO.83968

なるほど、そのような使い方があるのですね。



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