* Win32 のグラフィック操作系のメモ [#n141d44f]
 
 *** DC の内容をファイルに保存 [#ua6bbd9b]
 
 こんな具合に。
 
  void SaveBitmap(HDC hdc, DWORD dwWidth, DWORD dwHeight, LPCTSTR lpszFn) 
  {
 	DWORD dwSize,dwFSize,dwLength;
 	HANDLE fh;
 	LPBITMAPFILEHEADER lpHead;
 	LPBITMAPINFOHEADER lpInfo;
 	LPBYTE lpBuf,lpPixel;
 	RECT rec;
 	HDC hdcMem;
 	HBITMAP hBMP,hOld;
 	
 	if ((dwWidth*3) % 4==0) /* バッファの1ラインの長さを計算 */
 		dwLength=dwWidth*3;
 	else
 		dwLength=dwWidth*3+(4-(dwWidth*3) % 4);
 	
 		/* 書き込み用バッファのサイズ計算 */
 		dwFSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+dwLength*dwHeight;
 	
 	/* バッファ確保とポインタ設定 */
 	lpBuf=(LPBYTE)GlobalAlloc(GPTR,dwFSize);
 	lpHead=(LPBITMAPFILEHEADER)lpBuf;
 	lpInfo=(LPBITMAPINFOHEADER)(lpBuf+sizeof(BITMAPFILEHEADER));
 	lpPixel=lpBuf+sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
 	
 	/* 24ビットBMPファイルのヘッダ作成 */
 	lpHead->bfType='M'*256+'B';
 	lpHead->bfSize=dwFSize;
 	lpHead->bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
 	lpInfo->biSize=sizeof(BITMAPINFOHEADER);
 	lpInfo->biWidth=dwWidth;
 	lpInfo->biHeight=dwHeight;
 	lpInfo->biPlanes=1;
 	lpInfo->biBitCount=24;
 	
 	/* ウインドウのデバイスコンテキスト互換のBITMAP作成 */
 	hBMP=CreateCompatibleBitmap(hdc,dwWidth,dwHeight);
 	
 	/* BITMAPにウインドウのクライアント領域をコピー */
 	hdcMem=CreateCompatibleDC(hdc);
 	hOld=(HBITMAP)SelectObject(hdcMem,hBMP);
 	BitBlt(hdcMem,0,0,dwWidth,dwHeight,hdc,0,0,SRCCOPY);
 	SelectObject(hdcMem,hOld);
 	GetDIBits(hdc,hBMP,0,dwHeight,lpPixel,(LPBITMAPINFO)lpInfo,DIB_RGB_COLORS);
 	
 	//ReleaseDC(hwnd,hdc);
 	DeleteObject(hBMP);
 	DeleteObject(hdcMem);
 	
 	/* バッファをファイルに書き出す */
 	fh=CreateFile(lpszFn,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
 	WriteFile(fh,lpBuf,dwFSize,&dwSize,NULL);
 	CloseHandle(fh);
 	
 	GlobalFree(lpBuf);
  }
 
  ex.)
  
  hDC = GetDC( hWnd );
  
  SaveBitmap( hDC, 1024, 1024, ".\\test.bmp" );
  
 
 -----
 [[プログラム・開発系メモ]]
 
 

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS