> 通常のグラフィックは以下の処理で半分にすることができましたがプログラム的に問題はないでしょうか?
丁度2分の1のサイズの画像を作成するのでしたら、DrawExtendGraph ではなく GraphFilterBlt の
DX_GRAPH_FILTER_DOWN_SCALEフィルターを使用する方が綺麗な画像を作成できます
SetDrawScreenも使用する必要が無くなるので以下のようにコード量も減らせます
//画像を半分のサイズにする処理
int ScaleDownHD(int *handle) {
//高解像度だったら終了
if (Game->HDVer == 2)
return 0;
int TempGraph;
int x, y;
//オリジナルのサイズを取得
GetGraphSize(*handle,&x,&y);
x /= 2;
y /= 2;
//半分のサイズの画像を作成
TempGraph = MakeScreen(x , y ,true);
GraphFilterBlt(*handle, TempGraph, DX_GRAPH_FILTER_DOWN_SCALE, 2);
//オリジナルのサイズを消去
DeleteGraph(*handle);
*handle= TempGraph;
return 0;
}
> またマスク画像を内部で縮小する事は可能でしょうか?
マスク画像は現状画像の情報を取得する手段が無いので、ScaleDownHDのように
マスクハンドルから縮小マスクハンドルを作成することはできません
以下のようにマスクハンドルを作成する際に使用した画像ファイルを使用する方法なら現状でも可能です
( 戻り値が半分サイズに縮小されたマスクのハンドルとなります )
int ScaleDownHDMask( const char *FilePath )
{
int TempGraph;
int x, y;
int handle;
int MaskHandle;
BASEIMAGE BaseImage;
//透過色は使用しない設定にする
SetUseTransColor( FALSE );
//マスクとして使用する画像を読み込み
handle = LoadGraph( FilePath );
//オリジナルのサイズを取得
GetGraphSize( handle, &x, &y );
//半分のサイズの画像を作成
x /= 2;
y /= 2;
TempGraph = MakeScreen( x , y ,true );
//半分のサイズに縮小して転送
GraphFilterBlt( handle, TempGraph, DX_GRAPH_FILTER_DOWN_SCALE, 2 );
//半分のサイズのソフトウェア画像を作成
CreateARGB8ColorBaseImage( x, y, &BaseImage );
//ソフトウェア画像に縮小した画像を取得
int DrawScreen = GetDrawScreen() ; // 描画先を取得
SetDrawScreen( TempGraph ); // 描画先を半分のサイズの画像に変更
GetDrawScreenBaseImage( 0, 0, x, y, &BaseImage ); // 半分のサイズの画像からソフトウェア画像に転送
SetDrawScreen( DrawScreen ) ; // 描画先を元に戻す
//半分のサイズのマスクハンドルを作成
MaskHandle = MakeMask( x, y );
//マスクハンドルに縮小した画像を転送
GraphImageBltToMask( &BaseImage, 0, 0, MaskHandle );
//ソフトウェア画像の後始末
ReleaseBaseImage( &BaseImage );
//オリジナルのサイズの画像と半分のサイズの画像を削除
DeleteGraph( handle );
DeleteGraph( TempGraph );
//マスクハンドルを返す
return MaskHandle;
}