透過処理がされない
透過処理がされない
ゲームプログラミングの館の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
透過処理がされないのですが
原因としては何が考えられますか?
ソースコード
#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:透過処理がされない
私も初心者であまり的確な答えをいえないのですが
画像の透過処理はキャラの周りが黒に近い色であり
画像を表示する関数の最後にTRUEと付けることで、
確か出来たと思うので、間違っているかもですが
LoadGraphScreen( 0 , 0 , "back.bmp" , FALSE ) ;
こちらの最後をTRUEに変えてみては如何でしょうか。
違ってたら本当にすみません;
画像の透過処理はキャラの周りが黒に近い色であり
画像を表示する関数の最後にTRUEと付けることで、
確か出来たと思うので、間違っているかもですが
LoadGraphScreen( 0 , 0 , "back.bmp" , FALSE ) ;
こちらの最後をTRUEに変えてみては如何でしょうか。
違ってたら本当にすみません;
Re:透過処理がされない
あ、ちなみに透過処理をさせたいのは
> LoadGraphScreen( 0 , 0 , "hero.png" , TRUE ) ;
この行です。
透過処理をさせたい所を黒(R,G,B)=(0,0,0)にしたのですができません。
> LoadGraphScreen( 0 , 0 , "hero.png" , TRUE ) ;
この行です。
透過処理をさせたい所を黒(R,G,B)=(0,0,0)にしたのですができません。
Re:透過処理がされない
hero.pngを再度確認してみて下さい。
・ 透過したい部分が実は [R, G, B] = [0, 0, 0]になっていない
→ [0, 0, 0]に修正する
・ hero.pngのカラータイプが RGBAで保存されていて、アルファチャンネルが含まれている
→ RGB形式で保存してアルファチャンネルを削除して下さい。
→ 或いは黒い部分をアルファチャンネルで透過するように変更して下さい。
・ 透過したい部分が実は [R, G, B] = [0, 0, 0]になっていない
→ [0, 0, 0]に修正する
・ hero.pngのカラータイプが RGBAで保存されていて、アルファチャンネルが含まれている
→ RGB形式で保存してアルファチャンネルを削除して下さい。
→ 或いは黒い部分をアルファチャンネルで透過するように変更して下さい。
Re:透過処理がされない
> ・ hero.pngのカラータイプが RGBAで保存されていて、アルファチャンネルが含まれている
> → RGB形式で保存してアルファチャンネルを削除して下さい。
> → 或いは黒い部分をアルファチャンネルで透過するように変更して下さい。
これはどのようにすればよいのでしょうか。
あまり詳しくないので…
> → RGB形式で保存してアルファチャンネルを削除して下さい。
> → 或いは黒い部分をアルファチャンネルで透過するように変更して下さい。
これはどのようにすればよいのでしょうか。
あまり詳しくないので…
Re:透過処理がされない
お使いのグラフィックス編集ソフトは何ですか?
>hero.pngのカラータイプが RGBAで保存されていて、アルファチャンネルが含まれている
とりあえず今お使いのツールが判らないので、メジャーなツールで紹介します。
<Photoshopの場合>
・ アルファチャンネルがない
レイヤーが全て統合された状態で表示されます。
・ アルファチャンネルがある
レイヤーウインドウに「レイヤー0」というレイヤーが表示されます。
<Gimpの場合>
・ アルファチャンネルがない
チャンネルダイアログに「赤・緑・青」の3つのチャンネルだけがあります。
・ アルファチャンネルがある
チャンネルダイアログに「赤・緑・青」の3つのチャンネル以外に「アルファ値」という
チャンネルがあります。
<バイナリーエディタ>
PNGファイルを開き、ファイルの先頭から見ていって ASCII文字で IHDRと書かれたところの
次のバイトを 1バイト目としたとき10バイト目の数値を見て下さい。
・ アルファチャンネルがない
2か 3
・ アルファチャンネルがある
4か 6
もしこれでアルファチャンネルがあることが確認できたのならこのチャンネルを削除して
保存しなおす必要があります。
<Photoshopの場合>
レイヤーメニューから画像を統合し、PNGで保存して下さい。
<Gimpの場合>
レイヤーメニューの透明部分サブメニューから「アルファチャンネルを削除」を選んで
アルファチャンネルを削除、PNGで保存して下さい。
>hero.pngのカラータイプが RGBAで保存されていて、アルファチャンネルが含まれている
とりあえず今お使いのツールが判らないので、メジャーなツールで紹介します。
<Photoshopの場合>
・ アルファチャンネルがない
レイヤーが全て統合された状態で表示されます。
・ アルファチャンネルがある
レイヤーウインドウに「レイヤー0」というレイヤーが表示されます。
<Gimpの場合>
・ アルファチャンネルがない
チャンネルダイアログに「赤・緑・青」の3つのチャンネルだけがあります。
・ アルファチャンネルがある
チャンネルダイアログに「赤・緑・青」の3つのチャンネル以外に「アルファ値」という
チャンネルがあります。
<バイナリーエディタ>
PNGファイルを開き、ファイルの先頭から見ていって ASCII文字で IHDRと書かれたところの
次のバイトを 1バイト目としたとき10バイト目の数値を見て下さい。
・ アルファチャンネルがない
2か 3
・ アルファチャンネルがある
4か 6
もしこれでアルファチャンネルがあることが確認できたのならこのチャンネルを削除して
保存しなおす必要があります。
<Photoshopの場合>
レイヤーメニューから画像を統合し、PNGで保存して下さい。
<Gimpの場合>
レイヤーメニューの透明部分サブメニューから「アルファチャンネルを削除」を選んで
アルファチャンネルを削除、PNGで保存して下さい。
Re:透過処理がされない
ペイントの場合だと BMPの場合は透明度情報はなくなります。
PNGの場合はあったりなかったりと状況に応じて変わります。
BMPの場合容量も大きくなりますし、細かい編集もペイントではなかなか厳しいと思いますので、
http://www.adobe.com/jp/products/photoshop/compare/等の別のグラフィックス編集ソフトを使用することをお勧めします。
PNGの場合はあったりなかったりと状況に応じて変わります。
BMPの場合容量も大きくなりますし、細かい編集もペイントではなかなか厳しいと思いますので、
http://www.adobe.com/jp/products/photoshop/compare/等の別のグラフィックス編集ソフトを使用することをお勧めします。