画面画像はVRAM上に存在していて、ポインタで直接アクセスすることはできないので、まず
MakeXRGTB8ColorSoftImage と GetDrawScreenSoftImage という関数を使用してシステムメモリ内に
画面画像を転送してから GetImageAddressSoftImage という関数で転送先のシステムメモリ領域の
先頭アドレスを取得すれば画像情報にポインタでアクセスすることができます
画面中心にオレンジ色の四角形を描画して、その画像情報を GetDrawScreenSoftImage で
システムメモリ内に転送して、転送されたシステムメモリ内の領域にポインタでアクセスして
ドットの色を画面に表示するサンプルを組んでみましたので、よろしければ参考にしてください m(_ _)m
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int SoftImageHandle ;
// ウインドウモードで起動
ChangeWindowMode( TRUE ) ;
// DXライブラリの初期化
if( DxLib_Init() < 0 ) return -1 ;
// 取り込みたい画面領域のサイズのアルファチャンネルなし32bitカラーのソフトイメージを作成
SoftImageHandle = MakeXRGB8ColorSoftImage( 16, 16 ) ;
// メインループ
while( ProcessMessage() == 0 )
{
// 画面のクリア
ClearDrawScreen() ;
// 画面の中心にオレンジ色の四角形を描画
DrawBox( 320 - 8, 240 - 8, 320 + 8, 240 + 8, GetColor( 255, 128, 0 ), TRUE ) ;
// 画面の中心の画像をソフトイメージに転送
GetDrawScreenSoftImage( 320 - 8, 240 - 8, 320 + 8, 240 + 8, SoftImageHandle ) ;
// ソフトイメージの画像情報が格納されているシステムメモリ領域の先頭アドレスと1ライン辺りのバイト数( ピッチ )を取得する
BYTE *Image = ( BYTE * )GetImageAddressSoftImage( SoftImageHandle ) ;
int Pitch = GetPitchSoftImage( SoftImageHandle ) ;
// ソフトイメージ内の x = 8 y = 4 の座標のR,G,Bの色の数値を画面に描画する
DrawFormatString( 0, 0, GetColor( 255,255,255 ), "R:%d G:%d B:%d",
Image[ Pitch * 4 + 4 * 8 + 2 ],
Image[ Pitch * 4 + 4 * 8 + 1 ],
Image[ Pitch * 4 + 4 * 8 + 0 ] ) ;
// 裏画面の内容を表画面に反映
ScreenFlip() ;
}
// ソフトイメージの削除
DeleteSoftImage( SoftImageHandle ) ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}