[過去ログ] Delphiゲームプログラミング相談室 (976レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
290
(3): 名前は開発中のものです。 [sage] 03/05/21 03:36 ID:pDtj6lgc(1) AAS
>>288
288(5): 名前は開発中のものです。 [sage] 03/05/21 02:17 ID:yuA7Jdfb(1) AAS
質問です。
■■■
■□■
■■■
(元絵:□が残したい部分・■が黒塗りつぶし)
□□□
□■□
□□□
(マスク:□が白塗りつぶし・■が残したい部分の黒塗りつぶし)
を、OR→AND演算で表示すれば半透明化出来ると思うのですが、
↑のマスク画像無しで、半透明化するにはどうすればいいのでしょうか?

# ADVなエロゲーを再現しようと思ってるのですが、画像を抜き出してみたところ、
# 手元のゲーム(VisualArts系やDOのゲーム等)では、各キャラクターの立ち絵に
# マスク用画像が用意されてなく、黒背景に立ち絵が描いてある画像しか
# 入ってませんでした。これらは、何か別の画像と論理演算を行って
# 半透明化させてるんでしょうか?
TBitmap の ScanLine を使って、>>289
289(2): 名前は開発中のものです。 [sage] 03/05/21 02:49 ID:8zKfauhG(1) AAS
マスク画像は実行時に作成しているか、
1ピクセルずつ合成してるんじゃないの?

SRCANDやSRCPAINT以外にもたくさんの合成方法があるけど、
1回のBitBltで透過させる事は不可能だと思う。
さんの仰るとおり 1 pixel ごとに
処理するヨロシ。
295
(2): 288 [sage] 03/05/25 03:35 ID:OUd92QaS(1) AAS
>>289
>>290
外部リンク[html]:www.sm.rim.or.jp
とりあえず↑のサイトを参考に(というかほぼコピペ)作ってみますた。

外部リンク[zip]:www.geocities.co.jp

1ピクセル単位で色を取得、黒だったら白に、それ以外の色だったら
黒にするという処理を行いました。ただ、問題点が2つほど…

・For文で回してる処理が非常に遅い(scanlineのせい?)
・残したいキャラに含まれている黒色までマスク化してしまう(目の黒など)

この2つが非常に悩ませてくれます… 上はともかく、下は
見た目に非常に影響するので(;´д⊂ やはり、透明化したくない
部分の黒色だけ、塗りつぶさないような条件処理でしか
解決策はないんでしょうか?

>>293
293(1): 名前は開発中のものです。 [sage] 03/05/24 03:57 ID:o6GsTVdQ(1) AAS
>>288
TImageのプロパティで出来るじゃん
Transparentプロパティを使えば出来ますが、プログラムで再現したかったのでつ…

>>294
294(1): 名前は開発中のものです。 [sage] 03/05/24 11:34 ID:FLU40T1i(1) AAS
>>288
Doは知らんがVisualArts系にはマスク部分ある。確か立ち絵のファイルといっしょになってる。
画像抜くのに使ってるソフトによってはマスク部分が無視される。
というかあれのマスク部分考慮してる抜き出しソフト見たことない。あんまり需要無いしな。
とりあえず一番簡単な方法である、Susieにプラグイン入れて
画像抜き出しやってるんですが、マスク画像は入ってるのですね。
じゃぁDOの方も、立ち絵ファイルと一緒になってたりするのかしら…
296
(5): 290 [sage] 03/05/25 17:23 ID:ll42N4KR(1/3) AAS
>>295
ソース拝見いたしました。
> ・For文で回してる処理が非常に遅い(scanlineのせい?)
マスクを作るプロシージャにて、パレットコードを String に変換している
為と思われます。

procedure TForm1.make_mask(sBmp:TBitmap);
var
i,j, x : Integer;
p : PDWORD;
mp : PBYTEArray;
begin
for i:=0 to sBmp.Height-1 do begin
p := sBmp.ScanLine[i]; // ビットマップ座標(0,i)のポインタ
mp := mask.ScanLine[i];
x :=0;
for j:=0 to sBmp.Width-1 do begin
if p^ = $00000000 then //if str_mask = '000' then
begin
mp[x]:=$ff; mp[x+1]:=$ff; mp[x+2]:=$ff; // B=255 , G=255 , R=255
end else begin
mp[x]:=$00; mp[x+1]:=$00; mp[x+2]:=$00; // B=0 , G=0 , R=0
end;
Inc(p); Inc(x,3);
end;
end;
end;
……と、いうのは如何でしょう?( PDWORD よりも PDCHARArray の方が
わかりやすいでしょうか)
298
(1): 290 [sage] 03/05/25 17:41 ID:ll42N4KR(3/3) AAS
連続投稿すみません。
キャラ絵を見てみましたが、瞳の中や影にあたる部分に背景を透けさせる色
RGB(0,0,0) で塗られている部分があります。
この絵からマスクをつくると、目の部分が抜けてしまいますね。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.035s