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


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
0612
シルバー・ソードドットを利用した画像表示方法について11解決


シルバー・ソード

リンク

2009/6/12(Fri) 23:35:23|NO.25673

現在、別のウィンドウIDに保存してある画像からpgetを使って1ドットずつカラーを抽出して、
それを少しずつずらしながらpsetで表示していく…ということをやっているのですが、
下記のプログラムのようにすると、
どうしてもgcopyの部分が反映されてドットで読み出した部分が無意味になってしまいます。


buffer 2,640,480 mes "一石二鳥の灯台下暗し" mes "電光石火の三国志" buffer 1,640,480 gcopy 2,0,0,640,480 for y,0,480,1 for x,0,640,1 pget x,y pset x,y next next gsel 0 gcopy 1,0,0,640,480

他に方法があるのかもしれないと思い下記のようにしてみた所、今度は黒く表示されるだけでした。


buffer 2,640,480 mes "一石二鳥の灯台下暗し" mes "電光石火の三国志" buffer 1,640,480 for y,0,480,1 for x,0,640,1 gsel 2 pget x,y gsel 1 pset x,y next next gsel 0 gcopy 1,0,0,640,480

私的には、ドットで表示(表示速度も平常通り)が出来れば、透過やら拡大縮小やら、
その他もろもろの処理がHSPの標準機能なし&C言語風に表現できると思っているのですが、それは可能でしょうか?
それを含めた解決方法を、教えてくれると助かります。
<※前にも画像の透過表示について質問したのですが、結局の所それらの意見を反映してもうまく表現できませんでした。
なので今回のような表示方法になりました。前に答えて下さった方々へ、申し訳ありません;>



この記事に返信する


p、USAGI

リンク

2009/6/13(Sat) 00:23:38|NO.25675

何がしたいのか、いまいち分かりませんが。
こんな感じでしょうか?

色の設定やフォントの設定などはウィンドウごとに設定。
pget で取得した色は ginfo(16〜18) で変数に非難させる。


buffer 2,640,480 mes "一石二鳥の灯台下暗し" mes "電光石火の三国志" buffer 1,640,480 for y,0,480,1 for x,0,640,1 gsel 2 pget x,y r=ginfo(16) : g=ginfo(17) : b=ginfo(18) gsel 1 color r,g,b pset x,y next gsel 0 gcopy 1,0,0,640,480 await 1 next



GENKI

リンク

2009/6/13(Sat) 00:35:39|NO.25676

1個目のスクリプトは何がしたいのか良く分からないので、2個目のスクリプトに対してコメント。
color命令の影響範囲はアクティブなウィンドウだけです。
これを使ってください。
ginfo_r、ginfo_g、ginfo_b



> 透過やら拡大縮小やら、

出来ますよ。すごく重いですけど。
ただしアルゴリズム知って無いと大変です。この辺はググれば何か資料が出てくるでしょう。
でも単純に整数倍の拡大ぐらいなら知らなくても出来そうですね。

透過などのフィルタもいろいろ出来ますよ。
少し前に思いつきで適当に作ってみたサンプルがあるのでどうぞ。
http://homepage3.nifty.com/ghpk/day/day090316_flt001.hsp
詳しいことは資料のページを見てください。



SYAM

リンク

2009/6/13(Sat) 00:42:51|NO.25677

>ドットで表示(表示速度も平常通り)が出来れば、
>透過やら拡大縮小やら、その他もろもろの処理がHSPの標準機能なし&C言語風に表現できると思っている
>それは可能でしょうか?

C言語風、の意味がよくわかりませんが…。

「それ」が、「ドットで表示(表示速度も平常通り)」のことであれば、不可能だと思います。主に () の部分が。絶望的に。



GENKI

リンク

2009/6/13(Sat) 01:13:36|NO.25679

むう。回答出遅れた。

> ドットで表示(表示速度も平常通り)

この一文を完全に見落としてました…。なにが「出来ますよ」だ。w 速度面でアウトでしたね。
pget/psetでやる限りp、USAGIさんのサンプルで明らかなとおりの絶望的な速度です。

しかし速度面はVRAM使えば改善されます。
使ったことないのでどの程度かは分かりませんが圧倒的には速くなりますよ。(サンプル見る限り)
詳細はググってください。すぐ見つかります。


例え速度が出なくても、フィルターとか画像処理とか作ってると凄く楽しいですよ。
ぜひとも色んな画像加工をやってみることをお勧めします。



> C言語風、の意味がよくわかりませんが…。

同じく。でも私の場合C言語を良く知らないだけですが。orz

> HSPの標準機能なし&C言語風に表現できると思っているのですが、

pget/psetはHSPの標準機… gmodeとかgsquareとかの事ですね。(^ ^;



check

リンク

2009/6/13(Sat) 01:41:16|NO.25681

pget、pset(GetPixel、SetPixel)はとても重い関数なので
透過処理やら拡大処理もできないことはないが実用性はまずないだろう。

>HSPの標準機能なし&C言語風に表現できる
HSPを使っているのだったら、素直にgmode+gcopy、gzoomで行うのが適切であろう。
HSPの標準命令を使いたくないのならDIB(Device Independent Bitmap)の知識が必要であろう。
それに加え、透過処理等のアルゴリズムを知っている必要があるが・・・



ANTARES

リンク

2009/6/13(Sat) 02:02:24|NO.25682

>pgetを使って1ドットずつカラーを抽出して、
>それを少しずつずらしながらpsetで表示していく
 どう見ても「少しずつずらし」ていないので、
何もしていないのと同じだと思いますが?

よくわかりませんが、とりあえず、1ドットずつずらしてみる

pos 0,0: mes "一石二鳥の灯台下暗し" pos 1,1: mes "一石二鳥の灯台下暗し"



ANTARES

リンク

2009/6/13(Sat) 02:22:51|NO.25683

 mesを使うのは流石に見当違いでしょうから……

buffer 2,640,480 mes "一石二鳥の灯台下暗し" gsel 0 gmode 4,160,16,256: color 255,255,255 pos 0,0: gcopy 2,1,1 pos 1,1: gcopy 2,1,1



シルバー・ソード

リンク

2009/6/13(Sat) 10:00:45|NO.25689

たくさんのご意見、ありがとうございます。
では、1つ1つに返信を;

>p、USAGIさん
>何がしたいのか、いまいち分かりませんが。
とのことですが、私的にはmesのある部分にpicloadで画像を読み出し、
それをウィンドウに表示させるということをしたいと思っています。
ただこれだけならば、bcopyやpicloadを単体で使えばいいことなのですが、
ドット描画ならば指定した色を抽出せずに、透過まがいなことを出来ると思ったからです。
…理由は、どこかにあるであろう私が前につくったスレッドを参照して下さい;

>GENKIさん
ginfo命令を使うとは、思ってもいませんでした;
つまり、これをしないと色情報が初期化されてしまうということですね。
VRAMは確か、メモリの種類の1つでしたよね。
まだまだ学校で勉強の最中なので、うろ覚えですが;

それと別件なのですが、GENKIさんのサイトによく行かせてもらってます^^
3Dの扱い方が分かりやすく書かれていて、いつも参考にさせてもらってます。
これからも頑張ってください。…私が言うのもなんですが……;

>SYAMさん
速度を落とさずに表示するのは不可能ですか……。
一応GENKIさんから教えてもらったVRAMを利用した表示も試してみますが、
それでもうまくいかなければ、やはり無理なんでしょうね;

>checkさん
>HSPを使っているのだったら、素直にgmode+gcopy、gzoomで行うのが適切であろう
その2つを使ったところ、前に書いたスレッドからの引用ですが、
「透過は上手くいくのですが、どうしても残った部分(輪郭箇所)に黒い線が残ってしまいます。」
その為、画像自体を編集してみてなどと言われてやってみたのですが、やはり上手くいきませんでした。
なので、今回のような表示方法に至ったのです。
>HSPの標準命令を使いたくないのならDIB(Device Independent Bitmap)の知識が必要であろう。
必要とあらば、いつでも勉強する覚悟です。
>それに加え、透過処理等のアルゴリズムを知っている必要があるが・・・
それについては、C言語の画像処理方法を勉強している最中なので、
そこから徐々に引用していけば大丈夫だと思います。

>ANTARESさん
少しずつ動かすのはpget/psetの位置なので、mes自体はそのままです。
上記のプログラムは結局の所サンプルなので、実際のところはそこに画像が入ります。
for文(Y軸)を1ずらしたら、次のfor文(X軸)をウィンドウの終端まで行い、
それを繰り返す事で画像を表示しようと思ったのです。



KA

リンク

2009/6/13(Sat) 12:42:02|NO.25690

>>pgetを使って1ドットずつカラーを抽出して、それを少しずつずらしながらpsetで表示

表示としては下記の様にしたいのでしょうか?
速度的な面は分かりません。



screen 2,640,480 mes "一石二鳥の灯台下暗し" mes "電光石火の三国志" screen 1,640,480 for y,0,480,1 for x,0,640,1 pos x+y,y gcopy 2,x,y,1,1 next next



ANTARES

リンク

2009/6/14(Sun) 00:45:30|NO.25742

>少しずつ動かすのはpget/psetの位置なので、mes自体はそのままです。
 なるほど。しかし、「何もしていないのと同じ」という点は
解決していません。
>どうしてもgcopyの部分が反映されてドットで読み出した部分が
>無意味になってしまいます。
と、gcopyしなければうまく行くかのように書いていますが、
gcopyしなくても何も変わりません(bufferをscreenに変更して
実際に描かれた画像を見てください)。

>上記のプログラムは結局の所サンプルなので、実際のところはそこに画像が入ります。
 NO.25683のスクリプトは読んでいないという意味ですか?



シルバー・ソード

リンク

2009/6/14(Sun) 18:54:43|NO.25759

今回の件について、無事に解決したことを報告します。
答えて下さった方々へ、どうもありがとうございました。


最後に返答を;
>KAさん
表示方法は少し違いますが、私がやろうとしていることとは同じです。

>ANTARESさん
>NO.25683のスクリプトは読んでいないという意味ですか?
いいえ。ちゃんと読みましたが私がやりたいものとは違っていたので、
失礼かとは思いましたがANTARESさんのものは一旦外して答えてしまいました。
どうも失礼しました。



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