トップページ > 過去ログ > 記事閲覧
アルファチャンネル付のpng画像を判別
名前:mono 日時: 2011/02/15 02:39

DrawBillboard3Dを使って描画する際にZバッファを利用したいのですが、半透明を含んだ画像の場合はZバッファを切ってZソートを行わなければいけません。 しかし、DXライブラリには読み込んだpng画像がアルファチャンネル(半透明)を含んでいるか判別する画像がないようで困っています。 MV1GetTextureSemiTransStateの、通常のグラフィックハンドルに対して判別するようなバージョンの関数を実装していただけないでしょうか? もしくは、別のアプローチでの解決方法はありますでしょうか?

Page: 1 |

Re: アルファチャンネル付のpng画像を判別 ( No.1 )
名前:管理人 日時:2011/03/05 01:43

別の手段がありませんでしたので機能を追加しました よろしければこちらのバージョンをダウンロードしてください http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい) 以下の関数を追加しました // ソフトウエアで扱うイメージに含まれるピクセルのアルファ値をチェックする // 戻り値 // -1:エラー // 0:画像にアルファ成分が無い // 1:画像にアルファ成分があり、すべて最大(255)値 // 2:画像にアルファ成分があり、存在するアルファ値は最小(0)と最大(255)もしくは最小(0)のみ // 3:画像にアルファ成分があり、最小と最大以外の中間の値がある ) int CheckPixelAlphaSoftImage( int SIHandle ) ; LoadGraph で読み込んだ画像に半透明要素が含まれているかどうかを調べる関数を考えてみたのですが、 グラフィックハンドルのデータ構造の関係でバグが発生しそうだったのでソフトウエア画像で 判断する関数にしました 使い方は以下のような感じです int SoftHandle, GraphHandle ; int ValidAlpha ; // 画像をソフトウエアで扱うイメージとして読み込む SoftImage = LoadSoftImage( "Test.png" ) ; // ソートが必要なアルファ値( 中間の半透明のアルファ値 )が画像内に含まれるかチェック // ( 戻り値が 3 の場合は中間のアルファ値が画像内にある ) ValidAlpha = CheckPixelAlphaSoftImage( SoftImage ) == 3 ; // ソフトウエア画像からグラフィックハンドルを作成 GraphHandle = CreateGraphFromSoftImage( SoftImage ) ; // ソフトウエア画像は削除 DeleteSoftImage( SoftImage ) ; 一度ソフトウエア画像として読み込まなければならないので一手間増えてしまいますが、ご了承下さい orz

Page: 1 |