いつもDXライブラリに大変お世話になっております。
DXライブラリのバージョン3.17b(最新ファイルの更新日時は1/24 1:02)を使用時、
SetUseTransColor( FALSE ); を設定した状況下で、
・3D機能オン時、24bitの透過付き画像が期待通りに透過されない。
・3D機能オフ時、24bit画像で画像に設定された透過部分が透過にならない+透過指定がない画像でも真っ黒の部分が透過扱いになる。
という現象を確認いたしましたのでご報告いたします。
環境はこちらのログの通りです。
ttp://silversecond.com/mytmp/20170125_Log.txt
【使用した画像について】
検証に使用した画像は以下の2枚です。
ttp://silversecond.com/mytmp/Test.png
ttp://silversecond.com/mytmp/test_BG.jpg
test.pngが24bitの(おそらく)単色透過付きPNG、test_BG.jpgが24bitのJPGファイルです。
これら2つのファイルを使用し、以下のソースで実行しました。
【使用したソース】
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
ChangeWindowMode(TRUE) ; // ウィンドウモード
//SetUse3DFlag( FALSE ); // ★このコメントアウトを外すと画像の真っ黒の部分が透過されます。コメントアウトを入れると透過されて欲しいところが透過されません。
SetUseTransColor( FALSE ); // 透過色をなくす
if( DxLib_Init() == -1 ){ return -1;} // DXライブラリ初期化処理
int GrHandle = LoadGraph( "test.png" );// 画像を読み込み
int GrHandle2 = LoadGraph( "test_BG.jpg" );// 画像を読み込み
// ESCを押すまでループ
while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0){
DrawFillBox( 0, 0, 640, 480, GetColor(255,100,100) ); //ピンクで塗りつぶす
DrawGraph( 0, 0, GrHandle, TRUE ); // 画像を描画
DrawGraph( 300, 0, GrHandle2, TRUE ); // 画像を描画
printfDx( "Graphic test" ) ;
ScreenFlip();
WaitTimer(16);
clsDx( ) ;
}
DxLib_End() ; // DXライブラリ使用の終了
return 0 ; // ソフトの終了
}
【実行結果と期待する結果】
・SetUse3DFlag( FALSE );の有無を切り換えて実行した結果と、期待する結果をまとめたものが以下の画像です。
ttp://silversecond.com/mytmp/20170125_DXLib_report.jpg
@3D機能 オン時
左:test.pngの、指定された透過部分が透過されていない。
右:test_BG.jpg画像は透過されないので期待通りです。
A3D機能 オフ時
左:test.pngの指定された透過分(※白部分)と異なる、「黒部分」が透過されてしまう。
右:本来透過が含まれていないtest_BG.jpg画像の「黒部分」が透過されてしまう。
B個人的に期待していた理想の挙動
左:test.pngの、画像に指定された透過箇所のみ透過される
右:test_BG.jpgの画像は透過されない。
画像に設定されている透過の性質上、理想としては3D機能の有無にかかわらず
Bのようにできると嬉しいと考えているのですが、そのように設定する手段はございますでしょうか?
どちらもアルファチャンネル付きPNG画像などを使えばいいと言われればそうなのですが、
不特定多数のユーザが使うソフトを開発している都合上、もしできるならBの挙動にしたいと考えております。
よければご助言いただけますと幸いです。