ページ 11

透過処理がされない

Posted: 2010年9月06日(月) 13:24
by MAY
ゲームプログラミングの館の4章で、
透過処理がされないのですが
原因としては何が考えられますか?

ソースコード

#include "DxLib.h"

int Key[256];

void message_box_fullscreen(void){
/* int flag;
flag=MessageBox(
NULL ,
TEXT("フルスクリーンモードで起動しますか?") ,
TEXT("スクリーン設定") ,
MB_YESNO | MB_ICONQUESTION );
if(flag==IDNO)
*/ ChangeWindowMode( TRUE );
}

int GetHitKeyStateAll_2(int GetHitKeyStateAll_InputKey[/url]){
char GetHitKeyStateAll_Key[256];
GetHitKeyStateAll( GetHitKeyStateAll_Key );
for(int i=0;i<256;i++){
if(GetHitKeyStateAll_Key==1) GetHitKeyStateAll_InputKey++;
else GetHitKeyStateAll_InputKey=0;
}
return 0;
}

//


int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
message_box_fullscreen(); // フルスクリーンの設定
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1; // 初期化と裏画面化

while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll_2(Key) && !Key[KEY_INPUT_ESCAPE]){
//ココ!!
LoadGraphScreen( 0 , 0 , "back.bmp" , FALSE ) ;
LoadGraphScreen( 0 , 0 , "hero.png" , TRUE ) ;


ScreenFlip();
}

DxLib_End();
return 0;
}

環境

Windows7、Borland、bccDev

Re:透過処理がされない

Posted: 2010年9月06日(月) 13:29
by
私も初心者であまり的確な答えをいえないのですが
画像の透過処理はキャラの周りが黒に近い色であり
画像を表示する関数の最後にTRUEと付けることで、
確か出来たと思うので、間違っているかもですが
LoadGraphScreen( 0 , 0 , "back.bmp" , FALSE ) ;
こちらの最後をTRUEに変えてみては如何でしょうか。

違ってたら本当にすみません;

Re:透過処理がされない

Posted: 2010年9月06日(月) 13:35
by
ごめんなさい;違ってましたね;
上記のコメントは無視してくださってかまいません;

Re:透過処理がされない

Posted: 2010年9月06日(月) 15:14
by HK
hero.pngは自前の画像ですか?

画像を作るときに透過処理させていないのではないでしょうか?

Re:透過処理がされない

Posted: 2010年9月06日(月) 20:48
by MAY
あ、ちなみに透過処理をさせたいのは
> LoadGraphScreen( 0 , 0 , "hero.png" , TRUE ) ;
この行です。

透過処理をさせたい所を黒(R,G,B)=(0,0,0)にしたのですができません。

Re:透過処理がされない

Posted: 2010年9月06日(月) 22:49
by Justy
 hero.pngを再度確認してみて下さい。

・ 透過したい部分が実は [R, G, B] = [0, 0, 0]になっていない
 → [0, 0, 0]に修正する

・ hero.pngのカラータイプが RGBAで保存されていて、アルファチャンネルが含まれている
 → RGB形式で保存してアルファチャンネルを削除して下さい。
 → 或いは黒い部分をアルファチャンネルで透過するように変更して下さい。

Re:透過処理がされない

Posted: 2010年9月06日(月) 23:13
by MAY
> ・ hero.pngのカラータイプが RGBAで保存されていて、アルファチャンネルが含まれている
>  → RGB形式で保存してアルファチャンネルを削除して下さい。
>  → 或いは黒い部分をアルファチャンネルで透過するように変更して下さい。

これはどのようにすればよいのでしょうか。
あまり詳しくないので…

Re:透過処理がされない

Posted: 2010年9月06日(月) 23:49
by Justy
 お使いのグラフィックス編集ソフトは何ですか?


>hero.pngのカラータイプが RGBAで保存されていて、アルファチャンネルが含まれている
 とりあえず今お使いのツールが判らないので、メジャーなツールで紹介します。


<Photoshopの場合>
・ アルファチャンネルがない
 レイヤーが全て統合された状態で表示されます。

・ アルファチャンネルがある
 レイヤーウインドウに「レイヤー0」というレイヤーが表示されます。


<Gimpの場合>
・ アルファチャンネルがない
 チャンネルダイアログに「赤・緑・青」の3つのチャンネルだけがあります。

・ アルファチャンネルがある
 チャンネルダイアログに「赤・緑・青」の3つのチャンネル以外に「アルファ値」という
チャンネルがあります。


<バイナリーエディタ>
 PNGファイルを開き、ファイルの先頭から見ていって ASCII文字で IHDRと書かれたところの
次のバイトを 1バイト目としたとき10バイト目の数値を見て下さい。

・ アルファチャンネルがない
 2か 3
・ アルファチャンネルがある
 4か 6


 もしこれでアルファチャンネルがあることが確認できたのならこのチャンネルを削除して
保存しなおす必要があります。


<Photoshopの場合>
 レイヤーメニューから画像を統合し、PNGで保存して下さい。

<Gimpの場合>
 レイヤーメニューの透明部分サブメニューから「アルファチャンネルを削除」を選んで
アルファチャンネルを削除、PNGで保存して下さい。

Re:透過処理がされない

Posted: 2010年9月07日(火) 00:43
by MAY
windowsにもともとはいっていたペイントを使ったのですが
それでも出来ますか。

Re:透過処理がされない

Posted: 2010年9月07日(火) 01:01
by Justy
 ペイントなら bmpで保存してみて下さい。

Re:透過処理がされない

Posted: 2010年9月07日(火) 01:10
by MAY
ありがとうございます!
うまくいきました。
BMPなら透明度情報を保存しない。
PNGなら透明度情報を保存する。
ということですね。

Re:透過処理がされない

Posted: 2010年9月07日(火) 01:32
by Justy
 ペイントの場合だと BMPの場合は透明度情報はなくなります。
 PNGの場合はあったりなかったりと状況に応じて変わります。

 BMPの場合容量も大きくなりますし、細かい編集もペイントではなかなか厳しいと思いますので、
http://www.adobe.com/jp/products/photoshop/compare/等の別のグラフィックス編集ソフトを使用することをお勧めします。

Re:透過処理がされない

Posted: 2010年9月07日(火) 01:43
by MAY
ありがとうございます!使ってみます。