Win32 のグラフィック操作系のメモ
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* Win32 のグラフィック操作系のメモ [#n141d44f]
*** DC の内容をファイルに保存 [#ua6bbd9b]
こんな具合に。
void SaveBitmap(HDC hdc, DWORD dwWidth, DWORD dwHeight, ...
{
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(BITMAPINFOHEADE...
/* バッファ確保とポインタ設定 */
lpBuf=(LPBYTE)GlobalAlloc(GPTR,dwFSize);
lpHead=(LPBITMAPFILEHEADER)lpBuf;
lpInfo=(LPBITMAPINFOHEADER)(lpBuf+sizeof(BITMAPFILEHEADE...
lpPixel=lpBuf+sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFO...
/* 24ビットBMPファイルのヘッダ作成 */
lpHead->bfType='M'*256+'B';
lpHead->bfSize=dwFSize;
lpHead->bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAP...
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)lpIn...
//ReleaseDC(hwnd,hdc);
DeleteObject(hBMP);
DeleteObject(hdcMem);
/* バッファをファイルに書き出す */
fh=CreateFile(lpszFn,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,...
WriteFile(fh,lpBuf,dwFSize,&dwSize,NULL);
CloseHandle(fh);
GlobalFree(lpBuf);
}
ex.)
hDC = GetDC( hWnd );
SaveBitmap( hDC, 1024, 1024, ".\\test.bmp" );
-----
[[プログラム・開発系メモ]]
終了行:
* Win32 のグラフィック操作系のメモ [#n141d44f]
*** DC の内容をファイルに保存 [#ua6bbd9b]
こんな具合に。
void SaveBitmap(HDC hdc, DWORD dwWidth, DWORD dwHeight, ...
{
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(BITMAPINFOHEADE...
/* バッファ確保とポインタ設定 */
lpBuf=(LPBYTE)GlobalAlloc(GPTR,dwFSize);
lpHead=(LPBITMAPFILEHEADER)lpBuf;
lpInfo=(LPBITMAPINFOHEADER)(lpBuf+sizeof(BITMAPFILEHEADE...
lpPixel=lpBuf+sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFO...
/* 24ビットBMPファイルのヘッダ作成 */
lpHead->bfType='M'*256+'B';
lpHead->bfSize=dwFSize;
lpHead->bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAP...
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)lpIn...
//ReleaseDC(hwnd,hdc);
DeleteObject(hBMP);
DeleteObject(hdcMem);
/* バッファをファイルに書き出す */
fh=CreateFile(lpszFn,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,...
WriteFile(fh,lpBuf,dwFSize,&dwSize,NULL);
CloseHandle(fh);
GlobalFree(lpBuf);
}
ex.)
hDC = GetDC( hWnd );
SaveBitmap( hDC, 1024, 1024, ".\\test.bmp" );
-----
[[プログラム・開発系メモ]]
ページ名: