グラフィックハンドルから「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 ) ;