まず裏画面の代わりに使用する描画対象として使用可能な画像を作成して、それを
裏画面の代わりにもともと裏画面に描画していたものをすべてその画像に対して
描画するようにして、ScreenFlip の前にその画像を裏画面に描画してから
ScreenFlip するように処理を変更します
( 描画対象として使用可能な画像を作成するには SetDrawValidGraphCreateFlag と
MakeGraph を使用します、詳細は後述 )
その上で輝度を変更したい部分と同じ大きさの画像を、こちらもまた描画対象として使用可能な
画像として作成します
そして、この画像に裏画面の代わりに描画対象としている画像の内の描画輝度を
変更したい部分を描画して、その次にその画像を SetDrawBright 関数で描画輝度を
変更した上で裏画面の代わりの画像に描画します
形は四角形ですが、これで希望の部分の描画輝度を変更することができます
DrawBlendGraph 等のブレンド画像の機能を使用すれば四角形以外でも可能です
SetDrawValidGraphCreateFlag と MakeGraph を使った描画対象として使用可能な画像の
作成の仕方ですが、以下のようにします
SetDrawValidGraphCreateFlag( TRUE ) ; // 描画対象にできる画像を作成する指定
screenhandle = MakeGraph( 640, 480 ) ; // 描画対象にできる画像の作成
SetDrawValidGraphCreateFlag( FALSE ) ; // 描画対象にできる画像を作成する指定を解除
そして、こうして作成した画像を描画対象にする場合は SetDrawScreen 関数の引数に渡します
SetDrawScreen( screenhandle ) ;
こちらの機能を使用して描画輝度を変更するサンプルです
画面一杯のサイズの画像 back.bmp( 640x480サイズの画像 ) を描画した後、128x128 サイズの領域を
輝度を 0,255,255 に変更しています( あと無意味にその領域が画面中央を左右に動きます )
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int backhandle, screenhandle, dvhandle, x, add;
// ウインドウモードで起動
ChangeWindowMode( TRUE );
SetUseIMEFlag( TRUE ) ;
// DXライブラリの初期化
if( DxLib_Init() < 0 ) return -1;
// 画像の読み込み
backhandle = LoadGraph( "back.bmp" );
// 裏画面の代わりに使用する描画可能な画像の作成
SetDrawValidGraphCreateFlag( TRUE ) ;
screenhandle = MakeGraph( 640, 480 ) ;
SetDrawValidGraphCreateFlag( FALSE ) ;
// 輝度変更処理に使用する描画可能な画像の作成
SetDrawValidGraphCreateFlag( TRUE ) ;
dvhandle = MakeGraph( 128, 128 ) ;
SetDrawValidGraphCreateFlag( FALSE ) ;
// メインループ(何かキーが押されたらループを抜ける)
x = 0;
add = 8;
while( ProcessMessage() == 0 && CheckHitKeyAll() == 0 )
{
// 移動
x += add;
if( x < 0 || x > 640 ) add = -add;
// 描画先を描画可能画像にする
SetDrawScreen( screenhandle );
// 背景の描画
DrawGraph( 0, 0, backhandle, TRUE );
// 描画先を輝度変更処理用の画像にする
SetDrawScreen( dvhandle ) ;
// 輝度を変更したい部分を描画する
DrawGraph( -x, -176, screenhandle, FALSE ) ;
// 描画先を再び描画可能画像にする
SetDrawScreen( screenhandle ) ;
// 描画輝度をセット
SetDrawBright( 0, 255, 255 ) ;
// 輝度を変更した画像を描画
DrawGraph( x, 176, dvhandle, FALSE ) ;
// 描画輝度を元に戻す
SetDrawBright( 255, 255, 255 ) ;
// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK ) ;
// 裏画面の代わりの描画可能画像を描画
DrawGraph( 0, 0, screenhandle, FALSE ) ;
// 裏画面の内容を表画面に反映
ScreenFlip();
}
// DXライブラリの後始末
DxLib_End();
// ソフトの終了
return 0;
}
よろしければお試し下さい m(_ _)m