GraphFilter に特定の色を別の色に置き換えるフィルター DX_GRAPH_FILTER_REPLACEMENT を追加しました
GraphFilterBlt(
元の画像のグラフィックハンドル,
色置換後の画像を転送するグラフィックハンドル,
DX_GRAPH_FILTER_REPLACEMENT,
置換する色の赤成分( 0〜255 ), 置換する色の緑成分( 0〜255 ), 置換する色の青成分( 0〜255 ), 置換する色のα成分( 0〜255 ),
置換後の色の赤成分( 0〜255 ), 置換後の色の緑成分( 0〜255 ), 置換後の色の青成分( 0〜255 ), 置換後の色のα成分( 0〜255 ),
) ;
この機能を使って、背景の黒い領域を透明なピクセルにしてしまおう、というわけです
この機能を追加したバージョンをこちらにアップしましたので、よろしければダウンロードしてください m(_ _)m
https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用
https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用
https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.3 用
https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用
https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用
https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース
(中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい)
DX_GRAPH_FILTER_REPLACEMENT の機能を使用して、Movie.mp4 という動画ファイルの
真っ黒な部分を透明なピクセルに置き換えてから MovieImage????.pngファイルで保存する( ???? の部分は連番 )、
というプログラムを組んでみましたので、よろしければ参考にしてみてください m(_ _)m
#include "DxLib.h"
#include <stdlib.h>
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ScreenHandle ;
int MovieHandle ;
int SizeX, SizeY ;
int ImageCounter = 0 ;
char FilePath[ 256 ] ;
// ウインドウモードで起動
ChangeWindowMode( TRUE ) ;
// 画面を 32bitカラーに設定
SetGraphMode( 640, 480, 32 ) ;
// DXライブラリの初期化
if( DxLib_Init() < 0 ) return -1 ;
// 描画先を裏画面に変更
SetDrawScreen( DX_SCREEN_BACK ) ;
// 動画の読み込み
MovieHandle = LoadGraph( "Movie.mp4" ) ;
// 画像のサイズを取得
GetGraphSize( MovieHandle, &SizeX, &SizeY ) ;
// 画像と同サイズの描画可能画像を作成
ScreenHandle = MakeScreen( SizeX, SizeY, TRUE ) ;
// 動画の再生開始
PlayMovieToGraph( MovieHandle, DX_PLAYTYPE_LOOP ) ;
// メインループ
while( ProcessMessage() == 0 )
{
// 画面をクリア
ClearDrawScreen() ;
// 動画を描画
DrawGraph( 0, 0, MovieHandle, FALSE ) ;
// 真っ黒色のピクセルを透明なピクセルに置き換えた画像を作成
GraphFilterBlt( MovieHandle, ScreenHandle, DX_GRAPH_FILTER_REPLACEMENT, 0, 0, 0, 255, 0, 0, 0, 0 ) ;
// 描画先を描画可能画像に変更
SetDrawScreen( ScreenHandle ) ;
// 描画可能画像をpngファイルで保存
sprintf( FilePath, "MovieImage%04d.png", ImageCounter ) ;
ImageCounter ++ ;
SaveDrawScreenToPNG( 0, 0, SizeX, SizeY, FilePath ) ;
// 描画先を裏画面に戻す
SetDrawScreen( DX_SCREEN_BACK ) ;
// 裏画面の内容を表画面に反映
ScreenFlip() ;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}