いつもdxlibを使わせてもらってます。いれぶんといいます。
現在、背景透過して動画を再生する関数を作成しているのですが、
グリーンバックの動画を背景透過することができません。
背景が黒と白の時はDX_GRAPH_FILTER_BRIGHT_CLIPを使用して透過することができたのですが、
グリーンバックはこれではうまくいかなかったので調べたところ、
DX_GRAPH_FILTER_REPLACEMENTで色を直接指定してできるということだったのでやってみたのですがうまくいきませんでした。
引数などを確認しても特に間違ってそうなところが分かりませんでした。
下記にコードを置いておきますので、お時間がある時でかまいませんので、間違ってるところがあったら教えていただきたいです。
/// <summary>
/// 背景透過動画再生関数
/// </summary>
/// <param name="movieHandle">動画ハンドル</param>
/// <param name="screenHandle">スクリーンハンドル※MakeScreen関数でハンドルを作ってその時に第三引数をTRUEにする必要がある</param>
/// <param name="movieBackColorType">動画背景色のタイプ(0:黒, 1:緑, 2:白を指定する)</param>
/// <param name="movieWidht">動画幅</param>
/// <param name="movieHeght">動画高さ</param>
/// <param name="position">動画座標</param>
/// <param name="isLoop">動画をループするか</param>
/// <param name="screenType">最終的に描画するとこのスクリーンハンドル</param>
void PlayTransparentMovie(int movieHandle, int screenHandle, unsigned short movieBackColorType, int movieWidht, int movieHeight, VECTOR position, bool isLoop, int screenType)
{
//スクリーンハンドルに動画を描画する
SetDrawScreen(screenHandle);
//ループ再生するかどうか
if (isLoop)
{
PlayMovieToGraph(movieHandle, DX_PLAYTYPE_LOOP);
}
else
{
PlayMovieToGraph(movieHandle);
}
DrawExtendGraph(position.x, position.y, position.x + movieWidht, position.y + movieHeight, movieHandle, TRUE);
//元のスクリーンハンドルに戻す
SetDrawScreen(screenType);
//スクリーンハンドルを画像として透過してから描画
//背景の色によって透過する色を変える
if (movieBackColorType == 0)//黒
{
GraphFilter(screenHandle, DX_GRAPH_FILTER_BRIGHT_CLIP, DX_CMP_LESS, 10, TRUE, GetColor(0, 255, 0), 0);
}
else if (movieBackColorType == 1)//緑
{
//GraphFilter(screenHandle, DX_GRAPH_FILTER_BRIGHT_CLIP, DX_CMP_LESS, 128, TRUE, GetColor(0, 0, 0), 0);
GraphFilter(screenHandle, DX_GRAPH_FILTER_REPLACEMENT, 0, 255, 0, 255, 0, 0, 0, 0);
}
else//白
{
GraphFilter(screenHandle, DX_GRAPH_FILTER_BRIGHT_CLIP, DX_CMP_GREATER, 245, TRUE, GetColor(0, 255, 0), 0);
}
DrawExtendGraph(position.x, position.y, position.x + movieWidht, position.y + movieHeight, screenHandle, TRUE);
}