背景透過のPNGの描画
背景透過のPNGの描画
なぜかキャラの周りの白い部分(背景)まで四角く描画されてしまうので、GIMPというツールを使って白い背景を透過(α値を0に)しました。しかし(DX_BLENDMODE_ALPHA,?)で第二引数に値を入れますよね
α値を0にすると背景は透過されるがキャラも透過される。
α値を255にすると背景が白く残る。
背景のα値を0に、キャラのα値を255にして描画する方法ってありますか?
そうでなくても背景が透過できればどういう方法でもいいのですが
α値を0にすると背景は透過されるがキャラも透過される。
α値を255にすると背景が白く残る。
背景のα値を0に、キャラのα値を255にして描画する方法ってありますか?
そうでなくても背景が透過できればどういう方法でもいいのですが
Re:背景透過のPNGの描画
[color=#d0b0c0" face="monospace]
>背景のα値を0に、キャラのα値を255にして描画する方法
[/color]
DrawGraph()などの関数を使う時、引数 TransFlagを TRUEにしていますか?
その素材には本当にアルファチャンネルが含まれていますか?
もし、していてもそうなるのであれば、再現できるその素材とサンプルコードを
提示してもらえれば何かわかるかもしれません。
>背景のα値を0に、キャラのα値を255にして描画する方法
[/color]
DrawGraph()などの関数を使う時、引数 TransFlagを TRUEにしていますか?
その素材には本当にアルファチャンネルが含まれていますか?
もし、していてもそうなるのであれば、再現できるその素材とサンプルコードを
提示してもらえれば何かわかるかもしれません。
Re:背景透過のPNGの描画
> もし、していてもそうなるのであれば、再現できるその素材とサンプルコードを
> 提示してもらえれば何かわかるかもしれません。
素材は透過したい画像でいいのでしょうか?
> 提示してもらえれば何かわかるかもしれません。
素材は透過したい画像でいいのでしょうか?
Re:背景透過のPNGの描画
[color=#d0b0c0" face="monospace]
>素材は透過したい画像でいいのでしょうか?
[/color]
ええ、透過処理済みの画像を。
>素材は透過したい画像でいいのでしょうか?
[/color]
ええ、透過処理済みの画像を。
Re:背景透過のPNGの描画
[color=#d0b0c0" face="monospace]
>ちなみにαチャンネルはちゃんと入っていてtransもTRUEになっています
[/color]
だとすると、DxLib_Init()より前に
[color=#d0d0ff" face="monospace]
SetNotUse3DFlag(TRUE);
[/color]
とか或いは
[color=#d0d0ff" face="monospace]
SetUseDirectDrawFlag(FALSE);
SetNotUse3DFlag(TRUE);
[/color]
とかするとどうなりますか?
[color=#d0b0c0" face="monospace]
>キャラの周りの白い部分
[/color]
あれ? ひょっとして、キャラの周囲の1ピクセル前後だけ、の話しだったりします?
>ちなみにαチャンネルはちゃんと入っていてtransもTRUEになっています
[/color]
だとすると、DxLib_Init()より前に
[color=#d0d0ff" face="monospace]
SetNotUse3DFlag(TRUE);
[/color]
とか或いは
[color=#d0d0ff" face="monospace]
SetUseDirectDrawFlag(FALSE);
SetNotUse3DFlag(TRUE);
[/color]
とかするとどうなりますか?
[color=#d0b0c0" face="monospace]
>キャラの周りの白い部分
[/color]
あれ? ひょっとして、キャラの周囲の1ピクセル前後だけ、の話しだったりします?
Re:背景透過のPNGの描画
>ちなみにαチャンネルはちゃんと入っていてtransもTRUEになっています
だとすると、DxLib_Init()より前に
SetNotUse3DFlag(TRUE);
とか或いは
SetUseDirectDrawFlag(FALSE);
SetNotUse3DFlag(TRUE);
とかするとどうなりますか?
特に透過できませんでした。
>キャラの周りの白い部分
あれ? ひょっとして、キャラの周囲の1ピクセル前後だけ、の話しだったりします?
いいえ。キャラを除いてロードした画像サイズの背景が白で描画されます
だとすると、DxLib_Init()より前に
SetNotUse3DFlag(TRUE);
とか或いは
SetUseDirectDrawFlag(FALSE);
SetNotUse3DFlag(TRUE);
とかするとどうなりますか?
特に透過できませんでした。
>キャラの周りの白い部分
あれ? ひょっとして、キャラの周囲の1ピクセル前後だけ、の話しだったりします?
いいえ。キャラを除いてロードした画像サイズの背景が白で描画されます
Re:背景透過のPNGの描画
すみません。あと透過した画像は東方本家のものだったりするので多分掲載はだめ、でしょうね。
GIMPなどのツールでαチャンネル追加、背景を選択、削除したのでおそらく透過できていると思いますが。
GIMPなどのツールでαチャンネル追加、背景を選択、削除したのでおそらく透過できていると思いますが。
Re:背景透過のPNGの描画
[color=#d0b0c0" face="monospace]
>GIMPなどのツールでαチャンネル追加、背景を選択、削除したのでおそらく透過できていると思いますが
[/color]
その画像ファイル(多分 PNG?)をあらためて GIMPに読み込ませてアルファチャンネルが
入っているかどうかで確認できますよ。
その上で、画像ファイルに問題がなければ以下のコードを実行してみて下さい。
[color=#d0d0ff" face="monospace]#include "DxLib.h"
int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int)
{
ChangeWindowMode(TRUE);
if(DxLib_Init() < 0) return -1;
SetDrawScreen(DX_SCREEN_BACK);
int image = LoadGraph("******.png");
if(image == -1) return -1;
int graphSizeX, graphSizeY;
GetGraphSize(image, &graphSizeX, &graphSizeY);
int alpha = 0, offset = 5;
while(ProcessMessage() != -1)
{
char Key[256];
GetHitKeyStateAll( Key );
if(Key[ KEY_INPUT_ESCAPE ])
break;
ClearDrawScreen();
SetBackgroundColor(50, 50, 70);
int blendMode, blendParam;
GetDrawBlendMode(&blendMode, &blendParam);
SetDrawBlendMode(DX_BLENDMODE_ALPHA, alpha);
alpha += offset;
if(alpha > 255)
{
alpha = 255;
offset = -offset;
}
else
if(alpha < 0)
{
alpha = 0;
offset = -offset;
}
DrawGraph((DEFAULT_SCREEN_SIZE_X-graphSizeX)/2,
(DEFAULT_SCREEN_SIZE_Y-graphSizeY)/2, image , TRUE);
SetDrawBlendMode(blendMode, blendParam);
ScreenFlip();
}
DxLib_End();
return 0;
}
[/color]
これは読み込んだ画像ファイル(******.png)をアルファ値が0~255に変化させながら
表示するものです。
このプログラムでその画像ファイルを読み込ませて(******の部分は書き換えて)試しても、
同様にうまくいかないとなると、ちょっと厄介です……。
>GIMPなどのツールでαチャンネル追加、背景を選択、削除したのでおそらく透過できていると思いますが
[/color]
その画像ファイル(多分 PNG?)をあらためて GIMPに読み込ませてアルファチャンネルが
入っているかどうかで確認できますよ。
その上で、画像ファイルに問題がなければ以下のコードを実行してみて下さい。
[color=#d0d0ff" face="monospace]#include "DxLib.h"
int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int)
{
ChangeWindowMode(TRUE);
if(DxLib_Init() < 0) return -1;
SetDrawScreen(DX_SCREEN_BACK);
int image = LoadGraph("******.png");
if(image == -1) return -1;
int graphSizeX, graphSizeY;
GetGraphSize(image, &graphSizeX, &graphSizeY);
int alpha = 0, offset = 5;
while(ProcessMessage() != -1)
{
char Key[256];
GetHitKeyStateAll( Key );
if(Key[ KEY_INPUT_ESCAPE ])
break;
ClearDrawScreen();
SetBackgroundColor(50, 50, 70);
int blendMode, blendParam;
GetDrawBlendMode(&blendMode, &blendParam);
SetDrawBlendMode(DX_BLENDMODE_ALPHA, alpha);
alpha += offset;
if(alpha > 255)
{
alpha = 255;
offset = -offset;
}
else
if(alpha < 0)
{
alpha = 0;
offset = -offset;
}
DrawGraph((DEFAULT_SCREEN_SIZE_X-graphSizeX)/2,
(DEFAULT_SCREEN_SIZE_Y-graphSizeY)/2, image , TRUE);
SetDrawBlendMode(blendMode, blendParam);
ScreenFlip();
}
DxLib_End();
return 0;
}
[/color]
これは読み込んだ画像ファイル(******.png)をアルファ値が0~255に変化させながら
表示するものです。
このプログラムでその画像ファイルを読み込ませて(******の部分は書き換えて)試しても、
同様にうまくいかないとなると、ちょっと厄介です……。
Re:背景透過のPNGの描画
ちょっと道それますが、
GIMPで
αチャンネル追加、背景を選択、削除。
削除した部分は縞模様になり色もなくなりますけど、
それでα値が0になったことになったのでしょうか
GIMPで
αチャンネル追加、背景を選択、削除。
削除した部分は縞模様になり色もなくなりますけど、
それでα値が0になったことになったのでしょうか