トップページ > 記事閲覧
ムービーの透過について
名前:CRCR 日時: 2020/05/24 18:14

PlayMovieToGraphで動画(.mp4)を再生し、1/60秒ごとにスクリーンショットを.png式で出力して連番にするというソフトを作ったのですが、透過して出力ができません。 どのようにすればできるようになりますか?それとも動画を透過して再生することは現時点で不可能なのでしょうか?
メンテ

Page: 1 |

Re: ムービーの透過について ( No.1 )
名前:名無し 日時:2020/05/25 14:26

確認しましたが、ムービーグラフィックハンドルに透過色を指定して描画することはできないようです。
メンテ
Re: ムービーの透過について ( No.2 )
名前:管理人 日時:2020/05/26 01:04

名無しさんが仰られていますが、動画には透過色を指定することができません 具体的にはどのような動画を透過して出力しようとされているのでしょうか? ( 背景が真っ黒で、キャラクターだけが動き回るような動画でしょうか? )
メンテ
Re: ムービーの透過について ( No.3 )
名前:CRCR 日時:2020/05/26 16:13

そうですね。 背景が透過(真っ黒)されていてキャラが動いている感じです。
メンテ
Re: ムービーの透過について ( No.4 )
名前:管理人 日時:2020/05/27 02:03

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 ; }
メンテ
Re: ムービーの透過について ( No.5 )
名前:CRCR 日時:2020/05/27 07:44

ありがとうございます!!!! 圧倒的感謝です!!
メンテ

Page: 1 |

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

   クッキー保存