初めまして。
いつも DxLib を使わせて頂いています。
ブレンド画像の扱いについて、どなたかご存知の方はいないかと
質問させて頂きます。
LoadBlendGraph ではなく、LoadGraph で読み込んだアルファチャ
ンネル付きの画像 (png) を SetBlendGraph で指定して使ってい
るのですが、この関数に指定できるハンドルは DerivationGraph
で作成した分割ハンドルを指定することはできませんか?
アルファチャンネルの位置を動的に移動、もしくはスクロールさ
せたいので、DerivationGraph でハンドルを指定できたら言う事
ないのですが…。
MakeScreen で描画順位を変えてアルファチャンネルを使わなく
する方法や、マスクを使う方法も考えられますが、
前者は処理速度の面で渋り、後者は2値なのでジャギーが気になり、
できればアルファチャンネルで動的なクリッピングを行いたいと
考えています。
その為には DerivationGraph で描画する範囲のアルファチャンネル
のみを読み取り、描画する画像にブレンドファイルを適用させる、
という形が必要かなと思いまして。
// ----------------------------------------------
// 画像を読み込む (640x480)
int Image = LoadGraph("Image.bmp");
// 画面全体のクリッピング用のアルファチャンネル付画像を読み込む (640x480)
int BlendImage = LoadGraph("BlendImage.png");
// 画像の座標 (x64,y64) から座標 (x128,y128) までの
// 64 x 64 ピクセルの分割画像ハンドルを作成
int Image_Div = DerivationGraph( 64, 64, 64, 64, Image );
// 同じくクリッピング用アルファチャンネル付き画像の
// 座標 (x320, y320) から座標 (x384, y384) までの
// 64 x 64 ピクセルの分割画像ハンドルを作成
int BlendImage_Div = DerivationGraph( 320, 320, 64, 64, BlendImage );
SetBlendGraph( BlendImage_Div, 128, 128 );
DrawGraph( 320, 240, Image_Div, true ); // 座標 320, 240 に描画
ScreenFlip();
WaitKey();
// ----------------------------------------------
// 結果、共有元のBlendImageでブレンドされ、
// 分割ハンドルが無効になっている
現在は MakeScreen で一時的な領域を作って
そちらで対処していますが、こちらに画像を
持ってくるとガンマ値が変わったように
アルファ値が元のファイルと異なって
しまい、少し混乱しています。
(もちろん色深度は32bitです)