LRESULT CALLBACK WndProcScreenCapture(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
//MMTIME mm;
//CommonClass Common;
static int id,x,y;
HDC hdc;
PAINTSTRUCT ps;
static HBRUSH hBrush;
HWND desktop;
RECT rc;
static int width,height;
static BITMAPINFO bmpInfo;
static LPDWORD lpPixel;
static HBITMAP hBitmap;
static HDC hMemDC;
FILE *fpt;
int i,j;
//clock_t start,end;
switch (message) {
case WM_CREATE:
desktop=GetDesktopWindow();//デスクトップのハンドルを取得
GetWindowRect(desktop,&rc);//デスクトップのRECT情報を取得
width=rc.right;
height=rc.bottom;
//DIBの情報を設定する
bmpInfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
bmpInfo.bmiHeader.biWidth=width;
bmpInfo.bmiHeader.biHeight=height;
bmpInfo.bmiHeader.biPlanes=1;
bmpInfo.bmiHeader.biBitCount=32;
bmpInfo.bmiHeader.biCompression=BI_RGB;
//DIBSection作成
hdc=GetDC(hWnd);
hBitmap=CreateDIBSection(hdc,&bmpInfo,DIB_RGB_COLORS,(void**)&lpPixel,NULL,0);
hMemDC=CreateCompatibleDC(hdc);
SelectObject(hMemDC,hBitmap);
ReleaseDC(hWnd,hdc);
fopen_s(&fpt,"20090715.raw","wb");
fwrite((void**)&lpPixel[0],sizeof(unsigned char),width*height,fpt);
/* DIBSectionにグラデーション描画 */
for (i = 0;i < height;i++) {
for (j = 0;j <width;j++) {
#if 0
/* DIBピクセル列に直接アクセス */
lpPixel[i + j * 256] = (i << 16);
lpPixel[i + (j + 32) * 256] = (i << 8);
lpPixel[i + (j + 64) * 256] = i;
lpPixel[i + (j + 96) * 256] = (i << 16) | (i << 8) | i;
/* GDI経由で描画 */
SetPixel(hMemDC, i, j + 128, RGB(i, 0, 0));
SetPixel(hMemDC, i, j + 128 + 32, RGB(0, i, 0));
SetPixel(hMemDC, i, j + 128 + 64, RGB(0, 0, i));
SetPixel(hMemDC, i, j + 128 + 96, RGB(i, i, i));
#endif
}
}
//fwrite(&(bmpInfo.bmiHeader),sizeof(unsigned char),40,fpt);
//fwrite((void**)&lpPixel,sizeof(unsigned char),width*height,fpt);
//fwrite(&(bmpInfo.bmiColors),sizeof(unsigned char),width*height,fpt);
fclose(fpt);
//スクリーンをDIBSectionにコピー
hdc=GetDC(desktop);
BitBlt(hMemDC,0,0,width,height,hdc,0,0,SRCCOPY);
ReleaseDC(desktop,hdc);
break;
case WM_DESTROY:
//自らlpPixelを解放するべからず
DeleteDC(hMemDC);
DeleteObject(hBitmap); //BMPを削除した時、lpPixelも自動的に解放される
PostQuitMessage(0);
break;
case WM_PAINT:
hdc=BeginPaint(hWnd,&ps);
BitBlt(hdc,0,0,width,height,hMemDC,0,0,SRCCOPY);
EndPaint(hWnd,&ps);
break;
case WM_CHAR:
の様に書いて、windowにキャプチャ画像を表示することは
できたのですが、
この画像の画像情報のピクセルのポインタはどれなのでしょうか?
画像をraw形式でもいいので保存したいのですが、
どうしたら、キャプチャした画像を ファイルとして保存
できますか?//fwrite((void**)&lpPixel,sizeof(unsigned char),width*height,fpt);
ではうまくいきませんでした。
No.1ベストアンサー
- 回答日時:
ポインタは&lpPixel[0]でもいいですが
普通は簡単に
fwrite(lpPixel,sizeof(DWORD),width*height,fpt);
でしょうか(1画素32ビットなのでサイズはDWORDに)
キャプチャした画像を保存するなら
//スクリーンをDIBSectionにコピー
hdc=GetDC(desktop);
BitBlt(hMemDC,0,0,width,height,hdc,0,0,SRCCOPY);
ReleaseDC(desktop,hdc);
//コピーしたデータを保存
fwrite(lpPixel,sizeof(DWORD),width*height,fpt);
の順番になります
fwrite(lpPixel,sizeof(DWORD),width*height,fpt);
でうまくいきました
DWORDだったところに気がつきませんでした
ありがとうございました。
無事解決しました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- その他(プログラミング・Web制作) Pythonにおける物理のシミュレーションでの単位変換について 2 2023/06/02 17:11
- その他(プログラミング・Web制作) Pythonによる物理の斜方投射の位置座標表示について 2 2023/06/05 12:46
- その他(プログラミング・Web制作) 物理の斜方投射で目盛りに数値を入れたい 2 2023/05/27 06:32
- C言語・C++・C# #include <stdio.h>int main(void) { int buf[100] = 6 2022/11/01 22:45
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- HTML・CSS スクロールすると追従する画像のコードを書いているのですが、追従する画像の大きさの調節が上手くいきませ 2 2022/04/18 12:52
- その他(プログラミング・Web制作) Pythonでのかんたんな物理シミュレーションについての書籍 5 2023/06/02 07:37
- その他(プログラミング・Web制作) 物理の斜方投射の目盛り線とx軸、y軸の追加について 3 2023/05/26 21:11
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コントロール内の文字の背景色
-
デスクトップ撮影を実現するwin...
-
色描画
-
ビットマップ(表示速度とサイズ)
-
クライアント領域をCBitmapに取...
-
パレット番号で塗りつぶし
-
グラフの交点の求め方(Excel)
-
ゲームでは結局どっちが良いの?
-
マインクラフト(pc版)で座標...
-
エクセルで作った新しいウイン...
-
UWSCで特定のChromeのタブをア...
-
勝手にウィンドウが開いて止ま...
-
Tera Termに他のアプリから文字...
-
エクセルのコントロールツール...
-
コンボボックス内の文字サイズ変更
-
Labelの文字をスクロールする際...
-
「アイテムは収集されました」...
-
ピクチャボックスの座標取得
-
他アプリの操作(メニューバー)
-
Windowのちらつき防止
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コンテキスト依存とは?
-
画面がチカチカする
-
コントロール内の文字の背景色
-
ダイアログにビットマップを貼...
-
PlgBltでの透過
-
メモリデバイスコンテキスト&...
-
Active Basic 再描写処理
-
パレット番号で塗りつぶし
-
PrintScreenしたあとに画像を保...
-
ビットマップ(表示速度とサイズ)
-
SetWindowRgn()関数について。
-
OpenGLでウィンドウハンドルの取得
-
VC++のTextOutの再描画の仕方
-
usbデバイスとの通信
-
クライアント領域をCBitmapに取...
-
ハードコピーをプログラムから...
-
[Active Basic]BitBltで画像を表示
-
BitBlt関数について教えてください
-
色描画
-
VC++でopenGLを利用したい...。
おすすめ情報