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


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
0602
Noct画像の透過7解決


Noct

リンク

2006/6/2(Fri) 20:51:27|NO.952

はじめまして。と、誰に挨拶するわけでもないこういう掲示板にスレッドを立てるのは初めてなので緊張しているのですが、ちょいと気になったことがあったので質問させていただきます。

gmodeのモード4を使用した画像の透過処理なんですが、colorで指定した色が0と255以外の成分を持っていると透過されないようなのです。
黒、赤、青など、0と255のみで表すことのできる色はきちんと透過できたので、おそらく仕様なのだとは思うのですが、本当に仕様なのでしょうか。



この記事に返信する


tks

リンク

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



Drip

リンク

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



Noct

リンク

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はオレンジ色です。



tks

リンク

2006/6/3(Sat) 15:05:57|NO.964

画面の色は何ビットでしょうか? 16ビットだったりすると
うまくいかないようです。

以前に似たような件があったような…。



Drip

リンク

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"



Noct

リンク

2006/6/3(Sat) 17:15:57|NO.970

ありがとうございます。
tksさん、Dripさんのおっしゃるとおりでした。
pgetで検出した色はもともとの色と若干数値が異なっており、こちらの数値を入力すれば無事に透過できました。



K

リンク

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
とか

でも、この方法だと、デスクトップの色モードを調べる必要がある・・・
(表示してる色が違っていたら減色されたって事でもいいけど)



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