背景透過のPNGの描画

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ととろ

背景透過のPNGの描画

#1

投稿記事 by ととろ » 16年前

なぜかキャラの周りの白い部分(背景)まで四角く描画されてしまうので、GIMPというツールを使って白い背景を透過(α値を0に)しました。しかし(DX_BLENDMODE_ALPHA,?)で第二引数に値を入れますよね
α値を0にすると背景は透過されるがキャラも透過される。
α値を255にすると背景が白く残る。

背景のα値を0に、キャラのα値を255にして描画する方法ってありますか?
そうでなくても背景が透過できればどういう方法でもいいのですが

kazuoni

Re:背景透過のPNGの描画

#2

投稿記事 by kazuoni » 16年前

SetTransColor
を使用すれば解決するかと思います。

ちなみに、ブレンドモードは画像全体に効果をかけるものです。

560

Re:背景透過のPNGの描画

#3

投稿記事 by 560 » 16年前

質問の意図を勘違いしましたので編集しました。すみません。

Justy

Re:背景透過のPNGの描画

#4

投稿記事 by Justy » 16年前

[color=#d0b0c0" face="monospace]
>背景のα値を0に、キャラのα値を255にして描画する方法
[/color]

 DrawGraph()などの関数を使う時、引数 TransFlagを TRUEにしていますか?
 その素材には本当にアルファチャンネルが含まれていますか?

 もし、していてもそうなるのであれば、再現できるその素材とサンプルコードを
提示してもらえれば何かわかるかもしれません。

ととろ

Re:背景透過のPNGの描画

#5

投稿記事 by ととろ » 16年前

>  もし、していてもそうなるのであれば、再現できるその素材とサンプルコードを
> 提示してもらえれば何かわかるかもしれません。

素材は透過したい画像でいいのでしょうか?

ととろ

Re:背景透過のPNGの描画

#6

投稿記事 by ととろ » 16年前

ちなみにαチャンネルはちゃんと入っていてtransもTRUEになっています。

Justy

Re:背景透過のPNGの描画

#7

投稿記事 by Justy » 16年前

[color=#d0b0c0" face="monospace]
>素材は透過したい画像でいいのでしょうか?
[/color]

 ええ、透過処理済みの画像を。

Justy

Re:背景透過のPNGの描画

#8

投稿記事 by Justy » 16年前

[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ピクセル前後だけ、の話しだったりします?

ととろ

Re:背景透過のPNGの描画

#9

投稿記事 by ととろ » 16年前

>ちなみにαチャンネルはちゃんと入っていてtransもTRUEになっています

 だとすると、DxLib_Init()より前に

SetNotUse3DFlag(TRUE);

とか或いは

SetUseDirectDrawFlag(FALSE);
SetNotUse3DFlag(TRUE);

とかするとどうなりますか?


特に透過できませんでした。


>キャラの周りの白い部分

 あれ? ひょっとして、キャラの周囲の1ピクセル前後だけ、の話しだったりします?


いいえ。キャラを除いてロードした画像サイズの背景が白で描画されます

ととろ

Re:背景透過のPNGの描画

#10

投稿記事 by ととろ » 16年前

すみません。あと透過した画像は東方本家のものだったりするので多分掲載はだめ、でしょうね。
GIMPなどのツールでαチャンネル追加、背景を選択、削除したのでおそらく透過できていると思いますが。

Justy

Re:背景透過のPNGの描画

#11

投稿記事 by Justy » 16年前

[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に変化させながら
表示するものです。

 このプログラムでその画像ファイルを読み込ませて(******の部分は書き換えて)試しても、
同様にうまくいかないとなると、ちょっと厄介です……。

ととろ

Re:背景透過のPNGの描画

#12

投稿記事 by ととろ » 16年前

ちょっと道それますが、
GIMPで
αチャンネル追加、背景を選択、削除。
削除した部分は縞模様になり色もなくなりますけど、
それでα値が0になったことになったのでしょうか

Dixq (管理人)

Re:背景透過のPNGの描画

#13

投稿記事 by Dixq (管理人) » 16年前

そうですね。それで保存すれば透過されるはずですが・・。

ととろ

Re:背景透過のPNGの描画

#14

投稿記事 by ととろ » 16年前

何を試してみてもだめなようです。
GIMPでもっとじっくり調べてみます

閉鎖

“C言語何でも質問掲示板” へ戻る