|
|
2006/6/2(Fri) 20:51:27|NO.952
はじめまして。と、誰に挨拶するわけでもないこういう掲示板にスレッドを立てるのは初めてなので緊張しているのですが、ちょいと気になったことがあったので質問させていただきます。
gmodeのモード4を使用した画像の透過処理なんですが、colorで指定した色が0と255以外の成分を持っていると透過されないようなのです。
黒、赤、青など、0と255のみで表すことのできる色はきちんと透過できたので、おそらく仕様なのだとは思うのですが、本当に仕様なのでしょうか。
|
|
2006/6/2(Fri) 21:09:46|NO.953
できるはずですが…。
screen 1
cls 4
color 128,128,0
boxf 0,0,49,49
color 128,0,0
boxf 50,0,99,49
color 0,128,0
boxf 0,50,49,99
color 0,0,128
boxf 50,50,99,99
gsel 0
cls 4
gmode 4,100,100,255
pos 0,0
color 128,128,0
gcopy 1,0,0
|
|
2006/6/2(Fri) 21:47:01|NO.954
Dripです。
Noctさん、こんにちは。何か不具合が発生した場合、その不具合が発生するスクリプトも
同時に投稿すると、問題の究明がしやすくなります。
こちらでも様々なパターンで透明色付き半透明合成コピーを行ってみましたが、
問題は全く発生しませんでした。様々なパターンで透明色付き半透明合成コピーを試す
スクリプトを以下に示します。白いラインが常に表示されていれば、gmode 4は正常に動作しています。
buffer 3
repeat 192
hsvcolor cnt,255-(cnt+50),cnt+50
line cnt,0,cnt,100
loop
screen 0,192,100
repeat
redraw 0
color 255,255,255:boxf
hsvcolor cnt,255-(cnt\192+50),cnt\192+50
gmode 4,191,99,cnt\256:pos 0,0:gcopy 3,0,0
redraw 1
await 15
loop
stop
|
|
2006/6/3(Sat) 12:31:29|NO.962
わざわざありがとうございます。
boxfなら正常に動作するみたいですね。
ただ、Dripさんのスクリプトを実行すると白いラインが右に流れながら表示されるんですが、一定周期でウィンドウが白で塗りつぶされます。
「常に」ということなので、これはひょっとすると不具合なのかも……?
ちなみに、僕が組んだスクリプトは
buffer 1,144,256
picload "test.bmp"
screen 0,640,480
color 255,128,64
gmode 4,144,256,256
gcopy 1,0,0,144,256
で、test.bmpはペイントで用意した24ビットカラーのものです。
255,128,64はオレンジ色です。
|
|
2006/6/3(Sat) 15:05:57|NO.964
画面の色は何ビットでしょうか? 16ビットだったりすると
うまくいかないようです。
以前に似たような件があったような…。
|
|
2006/6/3(Sat) 15:26:22|NO.966
Dripです。
Noctさん、こんにちは。
Noctさんのおっしゃる通り、私のスクリプトは一定周期で真っ白〜フェードを繰り返しつつ、
中途半端な画像サイズで24ビットカラーの透過色付きコピーを実行し、
コピーされない部分(白いライン)が右に移動していれば、gmode 4は正常に動作している証拠です。
> 「常に」ということなので、これはひょっとすると不具合なのかも……?
不具合ではありません。正常です。
また、Noctさんがアップロードされたサンプルスクリプトでは、こちらで正常動作を確認しました。
オレンジ(R=255 G=128 B=64)で塗りつぶされたtest.bmpを用意して実行しましたが、
期待通り何も表示されませんでした。
私のサンプルが正しく実行されたということは、今回の問題の原因はtksさんのおっしゃる通り、
ディスプレイの設定に問題があるものと思われます。24ビットビットマップ画像を読み込んだとき、
バッファに出力された時は16ビットカラーに変換されてしまい、色に誤差が発生することがあります。
本当に読み込んだ画像の透明色がR=255 G=128 B=64であるか確認してください。
buffer 1,144,256
picload "test.bmp"
screen 0,640,480
color 255,128,64
gmode 4,144,256,256
gcopy 1,0,0,144,256
pget 0,0
dialog "画像の色 R="+ginfo_r+" G="+ginfo_g+" B="+ginfo_b+"\n透明指定 R=255 G=128 B=64"
|
|
2006/6/3(Sat) 17:15:57|NO.970
ありがとうございます。
tksさん、Dripさんのおっしゃるとおりでした。
pgetで検出した色はもともとの色と若干数値が異なっており、こちらの数値を入力すれば無事に透過できました。
|
|
2006/6/3(Sat) 17:41:57|NO.971
標準で付属されてる減色されない画像ロードのモジュールがある
#include "mod_img.as"
buffer 1,144,256
imgload "test.bmp"
screen 0,640,480
color 255,128,64
gmode 4,144,256,256
gcopy 1,0,0,144,256
標準命令だけで行くなら(計算が正しいかは分からない・・・)
#define global ctype TtoH(%1) (((%1)/8)*33)/4
#define global colorTtoH(%1,%2,%3) color TtoH(%1),TtoH(%2),TtoH(%3)
buffer 1,144,256
picload "test.bmp"
screen 0,640,480
colorTtoH 255,128,64
gmode 4,144,256,256
gcopy 1,0,0,144,256
毎回計算するのは無駄が出るので
dim hicol,256
repeat 256
hicol(cnt)=TtoH(cnt)
loop
とか
でも、この方法だと、デスクトップの色モードを調べる必要がある・・・
(表示してる色が違っていたら減色されたって事でもいいけど)
|
|