トップページ > 記事閲覧
グラデーションマップフィルタをかけると透過されない
名前:TR 日時: 2015/08/25 16:17

透過色つきPNG画像のグラフィックハンドルに対してGraphFilterでグラデーションマップフィルタをかけると 透過部分にもフィルタがかかってしまい透過されなくなります。 モノトーンなどの他のフィルタでは正常に透過されるのですが・・・ ライブラリのバージョンは3.14fです。 よろしくお願いします。
メンテ

Page: 1 |

Re: グラデーションマップフィルタをかけると透過されない ( No.1 )
名前:管理人 日時:2015/08/26 00:25

ご指摘ありがとうございます グラデーションマップフィルタを使用した場合も元の画像のアルファ値を保持するようにしましたので、 よろしければお試しになってみてください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_DevCppTest.exe // Dev-C++ 用 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をお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
メンテ
Re: グラデーションマップフィルタをかけると透過されない ( No.2 )
名前:TR 日時:2015/08/26 15:37

迅速な対応ありがとうございます 用意していただいたファイルで解決できました。 別の問題なのですが、マニュアルのDrawMaskに int TransMode : マスクを描画する際の透過色のタイプ      DX_MASKTRANS_NONE. 透過色なし      DX_MASKTRANS_BLACK. マスク中の黒色部分を書き込まない      DX_MASKTRANS_WHITE. マスク中の白色部分を書き込まない とありますが、実際に使ってみたところ DX_MASKTRANS_NONE:マスク中の白色部分を書き込まない DX_MASKTRANS_BLACK:マスク中の白色部分を書き込まない(DX_MASKTRANS_NONEと同じ) DX_MASKTRANS_WHITE:マスク処理が行われない となってしまいます 立て続けで申し訳ないですが、よろしくお願いします。
メンテ
Re: グラデーションマップフィルタをかけると透過されない ( No.3 )
名前:管理人 日時:2015/08/26 23:52

グラデーションマップフィルタは意図された通りの動作になった様で何よりです DrawMask の TransMode の説明は「『マスク画面にマスク画像を描画する際』の透過色」の説明です 例えばこちらのマスクのサンプルプログラムの #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int MaskHandle ; // ウインドウモードで起動 ChangeWindowMode( TRUE ) ; if( DxLib_Init() == -1 ) // DXライブラリ初期化処理 { return -1; // エラーが起きたら直ちに終了 } // マスク画面を作成します CreateMaskScreen() ; // マスク画像をロードします MaskHandle = LoadMask( "testMask.bmp" ) ; // ロードしたマスク画像をマスク画面の左上に描画します DrawMask( 0 , 0 , MaskHandle , DX_MASKTRANS_NONE ) ; // 画面いっぱいに赤い四角を描きます DrawBox( 0 , 0 , 640 , 480 , GetColor( 255 , 0 , 0 ) , TRUE ) ; // キーの入力待ちをします WaitKey() ; // マスク画面を削除します DeleteMaskScreen() ; DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 } ( testMask.bmp はDXライブラリのパッケージの「サンプルプログラム実行用フォルダ」に入っています ) この↓部分を // ロードしたマスク画像をマスク画面の左上に描画します DrawMask( 0 , 0 , MaskHandle , DX_MASKTRANS_NONE ) ; こう↓してみた場合と // ロードしたマスク画像をマスク画面の左上に描画します DrawMask( 0 , 0 , MaskHandle , DX_MASKTRANS_NONE ) ; DrawMask( 0 , 12 , MaskHandle , DX_MASKTRANS_NONE ) ; こう↓してみた場合とで結果を比較してみると // ロードしたマスク画像をマスク画面の左上に描画します DrawMask( 0 , 0 , MaskHandle , DX_MASKTRANS_NONE ) ; DrawMask( 0 , 12 , MaskHandle , DX_MASKTRANS_BLACK ) ; 違いがわかると思います 改めてご説明しますと、TransMode は 「『マスク画面に既に描かれている内容』に対して DrawMask で新たにマスク画像を上書きする場合に、 透過色処理を行わないか( DX_MASKTRANS_NONE )、 それともマスク画像の白い部分のみ上書きするか( DX_MASKTRANS_BLACK )、 もしくはマスク画像の黒い部分のみ上書きするか( DX_MASKTRANS_WHITE )」 を指定するための引数です わかり難くてすみません (- -;;
メンテ
Re: グラデーションマップフィルタをかけると透過されない ( No.4 )
名前:TR(解決) 日時:2015/08/27 09:50

解説ありがとうございます、おかげ様で納得できました。 マニュアルとサンプルをしっかり読むべきでした…すみません お手数おかけしました。
メンテ

Page: 1 |

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

   クッキー保存