トップページ > 記事閲覧
3D機能オフ時の画像の透過について
名前:SmokingWOLF 日時: 2016/12/11 20:11

いつもDXライブラリに大変お世話になっております。 画像の透過について、一点報告させていただきます。 DXライブラリのVer3.17(ファイルの更新日時は12/7 0:51)を使用し、 透過設定されたインデックスカラー(256色)のPNG画像を「3D機能をオフ」にして描画すると、 3D機能オンの場合と異なり、画像が透過されなくなる場合があるようです。 以下が、私の環境で後述のソースを実行して撮影した3D機能オン・オフ時の比較スクリーンショットです。 silversecond.com/mytmp/20161211_DxLibTest.png 不特定多数の人が使うゲーム作成ツールを開発しておりますので、 できれば3D機能オフ時の画像の透過を、3D機能オンの場合と同じにしたいと考えています。 お忙しいところ申し訳ございませんが、よければアドバイス等いただけますと幸いです。 ------------ 実験に使用した画像、こちらの環境のログファイル、ソースコードは以下の通りです。 ・検証に使用した画像(インデックスカラー(256色)透過画像) silversecond.com/mytmp/SampleChip.png ・ログファイル(3D機能オン時) silversecond.com/mytmp/20161211_Log.txt ・検証に使用したソースコード #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { SetOutApplicationLogValidFlag( TRUE ); // ログを出力 ChangeWindowMode(TRUE) ; // ウィンドウモード // SetUse3DFlag( FALSE ); // ★このコメントアウトを外すと画像が透過されなくなります if( DxLib_Init() == -1 ){ return -1;} // DXライブラリ初期化処理 int GrHandle = LoadGraph( "SampleChip.png" );// 画像を読み込み // ESCを押すまでループ while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0){ DrawFillBox( 0, 0, 640, 480, GetColor(255,100,100) ); //ピンクで塗りつぶす DrawGraph( 50, 100, GrHandle, TRUE ); // 画像を描画 printfDx( "Graphic test" ) ; ScreenFlip(); WaitTimer(16); clsDx( ) ; } DxLib_End() ; // DXライブラリ使用の終了 return 0 ; // ソフトの終了 }
メンテ

Page: 1 |

Re: 3D機能オフ時の画像の透過について ( No.1 )
名前:管理人 日時:2016/12/12 01:45

すみません、ソフトウエアレンダリングモードではパレット画像は各パレットの色に限らず 必ずパレット0番が透過されるという仕様となっています( 処理速度を稼げるので ) ただ、そんな仕様はどこにも書いておらず、当時よりCPU性能もかなり上がったので 透過色をパレット0番に固定しないように変更するべきなのですが、その変更をするには 沢山の箇所に手を加える必要があるので、とりあえず「パレット画像をパレット画像として 読み込むかどうか」を設定する関数を追加しました よろしければその関数を追加したこちらのバージョンをダウンロードしてください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.exe // C++ Builder 10.1 Berlin 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』をして下さい) 以下の関数を追加しました // 読み込む画像がパレット画像の場合、パレット画像として扱える場合はパレット画像として扱うかどうかを設定する // Flag  TRUE:パレット画像として扱える場合はパレット画像として扱う( デフォルト ) //     FALSE:パレット画像として扱える場合もパレット画像としては扱わない( 通常タイプの画像に変換して使用する ) ) int SetUsePaletteGraphFlag( int Flag ) ; LoadGraph などの関数で画像を読み込む前に SetUsePaletteGraphFlag( FALSE ) ; を 実行することでパレット画像から通常画像に変換されて読み込まれるので、通常の画像と 同じく SetTransColor で設定した色が透過されるようになります よろしければお試しください m(_ _)m
メンテ
Re: 3D機能オフ時の画像の透過について ( No.2 )
名前:SmokingWOLF(解決済み) 日時:2016/12/12 11:33

非常に早いご対応、誠にありがとうございます! 作ってくださった関数で期待通りの動作をすることを確認いたしました。 今のところ、パフォーマンス的にも目立った影響はないように思います。 Ver3.11頃までは、3D機能オフでも透過されていた画像が 最新版では透過されなくなったという報告が来て困っていたので本当に助かりました。 重ね重ね、ありがとうございました。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存