将CRgn rgn对象以图片形式输出便于查看
為了調試方便,將CRgn rgn對象以圖片形式輸出,便于查看
{
?CRgn rgn
?int w = m_lpShapePoints[4].x+4;
?int h = m_lpShapePoints[4].y+4;
?HWND hDesk = GetDesktopWindow();
?HDC hDC = ::GetDC(hDesk);
?CMemDC MemDC(hDC, CSize(w, h), 0);
?for (int x=0; x<w; x++)
?{
??for (int y=0; y<h; y++)
??{
???CPoint pt(x, y);
???if (rgn.PtInRegion(pt))
???{
????CDC *pDC = CDC::FromHandle(MemDC.GetMemDC());
????pDC->SetPixel(x, y, RGB(255, 0, 0));
???}
??}
?}
?SaveBitmap(MemDC.GetHBITMAP(), _T("c:\\rgnoutput.bmp");
??::ReleaseDC(hDesk, hDC);
}
BOOL SaveBitmap(HBITMAP hBitmap, LPCTSTR ptzFileName)
{
?HDC hDC;
?DWORD dwSize;
?BOOL bReturn;
?LPBYTE pBits;
?HANDLE hFile;
?BITMAP bmBitmap;
?BITMAPFILEHEADER bfhFile;
?BITMAPINFOHEADER bihInfo;
?// 返回值初始化為 FALSE
?bReturn = FALSE;
?// 取得屏幕兼容位圖的對象信息
?if (GetObject(hBitmap, sizeof(BITMAP), &bmBitmap))
?{
??// 設置 BITMAPINFOHEADER 結構
??bihInfo.biSize = sizeof(BITMAPINFOHEADER);
??bihInfo.biWidth = bmBitmap.bmWidth;
??bihInfo.biHeight = bmBitmap.bmHeight;
??bihInfo.biPlanes = 1;
??bihInfo.biBitCount = 24;
??bihInfo.biCompression = BI_RGB;
??bihInfo.biSizeImage =? _WidthPitch(bmBitmap.bmWidth) * bmBitmap.bmHeight;
??bihInfo.biXPelsPerMeter = 0;
??bihInfo.biYPelsPerMeter = 0;
??bihInfo.biClrUsed = 0;
??bihInfo.biClrImportant = 0;
??// 設置 BITMAPFILEHEADER 結構
??bfhFile.bfType = 0x4D42;??// "BM"
??bfhFile.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + bihInfo.biSizeImage;
??bfhFile.bfReserved1 = 0;
??bfhFile.bfReserved2 = 0;
??bfhFile.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
??// 分配內存
??pBits = (LPBYTE) HeapAlloc(GetProcessHeap(), 0, bihInfo.biSizeImage);
??if (pBits)
??{
???// 獲取屏幕設備場景
???hDC = CreateIC(_T("DISPLAY"), NULL, NULL, NULL);
???// 獲取 DIB 數據
???if (GetDIBits(hDC, hBitmap, 0, bmBitmap.bmHeight,
????pBits, (LPBITMAPINFO) &bihInfo, DIB_RGB_COLORS))
???{
????// 創(chuàng)建文件
????hFile = CreateFile(ptzFileName, GENERIC_WRITE, 0, NULL,
?????CREATE_ALWAYS, FILE_FLAG_SEQUENTIAL_SCAN, NULL);
????if (hFile != INVALID_HANDLE_VALUE)
????{
?????// 寫入 BITMAPFILEHEADER? 信息
?????bReturn = WriteFile(hFile, &bfhFile, sizeof(BITMAPFILEHEADER), &dwSize, 0);
?????if (bReturn)
?????{
??????// 寫入 BITMAPINFOHEADER 信息
??????bReturn = WriteFile(hFile, &bihInfo, sizeof(BITMAPINFOHEADER), &dwSize, 0);
??????if (bReturn)
??????{
???????// 寫入 DIB 數據
???????bReturn = WriteFile(hFile, pBits, bihInfo.biSizeImage, &dwSize, 0);
??????}
?????}
?????// 關閉文件句柄
?????CloseHandle(hFile);
????}
???}
???// 刪除設備場景,釋放內存
???DeleteDC(hDC);
???HeapFree(GetProcessHeap(), 0, (LPVOID) pBits);
??}
?}
?return bReturn;
?return 0;
}
轉載于:https://www.cnblogs.com/carl2380/archive/2010/12/29/1919539.html
總結
以上是生活随笔為你收集整理的将CRgn rgn对象以图片形式输出便于查看的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 路怒族是什么意思 路怒族的产生
- 下一篇: android 环境配置和安装, And