トップページ > 記事閲覧
イメージの変換について
名前:s8079 日時: 2016/10/02 02:08

たびたびお世話になります。 CPUで扱うイメージからグラフィックハンドルを作成するには CreateGraphFromSoftImageという便利な関数がありますが, その逆の変換はどのようにすればよいのでしょうか。
メンテ

Page: 1 |

Re: イメージの変換について ( No.1 )
名前:管理人 日時:2016/10/02 03:28

グラフィックハンドルから「CPUで扱うイメージ」に変換する機能はありません ( グラフィックハンドルの画像情報が収められているVRAMにアクセスできない場合もあるので ) なので、グラフィックハンドルの画像を「CPUで扱うイメージ」に変換したい場合は一度 「描画対象にできるグラフィックハンドル」に「変換したいグラフィックハンドル」を 描画して、それを GetDrawScreenSoftImage という関数で「CPUで扱うイメージ」に 取り込むことになります // 描画対象の画面から指定領域をソフトウエアイメージハンドルに転送する int GetDrawScreenSoftImage( int x1, int y1, int x2, int y2, int SIHandle ) ; < 例 > // 変換したいグラフィックハンドルと同じサイズの「描画対象にできるグラフィックハンドル」を作成 int SizeX, int SizeY ; GetGraphSize( GrHandle, &SizeX, &SizeY ) ; int TempScreen = MakeScreen( SizeX, SizeY, TRUE ) ; // 「描画対象にできるグラフィックハンドル」を描画対象に変更 SetDrawScreen( TempScreen ) ; // 変換したいグラフィックハンドルを描画 // 描画元の色値をそのまま書き込むためのブレンドモード DX_BLENDMODE_SRCCOLOR を使用する SetDrawBlendMode( DX_BLENDMODE_SRCCOLOR, 255 ) ; DrawGraph( 0, 0, GrHandle, TRUE ) ; SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 255 ) ; // 変換したいグラフィックハンドルと同じサイズの「CPUで扱うイメージ」を作成 int SIHandle = MakeARGB8ColorSoftImage( SizeX, SizeY ) ; // 「CPUで扱うイメージ」に「描画対象にできるグラフィックハンドル」の内容を取り込み GetDrawScreenSoftImage( 0, 0, SizeX, SizeY, SIHandle ) ; // 描画対象を裏画面に戻す SetDrawScreen( DX_SCREEN_BACK ) ; // 作業用に作成した「描画対象にできるグラフィックハンドル」を削除 DeleteGraph( TempScreen ) ; 因みに、もし「CPUで扱うイメージ」に変換したいグラフィックハンドルが MakeScreen で 作成したものでしたら、作業用の「描画対象にできるグラフィックハンドル」を作成したり、 そこに「変換したいグラフィックハンドル」を描画したりする工程を省略することができます // 「描画対象にできるグラフィックハンドル」を描画対象に変更 SetDrawScreen( GrHandle ) ; // 変換したいグラフィックハンドルと同じサイズのCPUで扱うイメージを作成 int SizeX, int SizeY ; GetGraphSize( GrHandle, &SizeX, &SizeY ) ; int SIHandle = MakeARGB8ColorSoftImage( SizeX, SizeY ) ; // 「CPUで扱うイメージ」に変換したいグラフィックハンドルの内容を取り込み GetDrawScreenSoftImage( 0, 0, SizeX, SizeY, SIHandle ) ; // 描画対象を裏画面に戻す SetDrawScreen( DX_SCREEN_BACK ) ;
メンテ

Page: 1 |

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

   クッキー保存