トップページ > 記事閲覧
スクリーンショットで得た画像をメモリ上に保存する方法について
名前:勉強太郎 日時: 2021/08/09 22:15

SaveDrawScreenだとファイル名を指定して保存するかと思いますが、これをchar配列などのプログラム上のメモリに保存する方法はないでしょうか? ただ、画面画像の参照をするだけなので、画面のピクセル単位で値が入っている配列の先頭ポインタを取得する方法でも構いません。
メンテ

Page: 1 |

Re: スクリーンショットで得た画像をメモリ上に保存する方法について ( No.1 )
名前:管理人 日時:2021/08/11 00:16

画面画像は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 ; }
メンテ
Re: スクリーンショットで得た画像をメモリ上に保存する方法について ( No.2 )
名前:勉強太郎 日時:2021/08/11 01:03

ありがとうございます! > GetImageAddressSoftImage こちらがまさに使いたかった関数でした!
メンテ

Page: 1 |

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

   クッキー保存