[已搞定]将CDC*的SetPixel保存起来解决方案

[已搞定]将CDC*的SetPixel保存起来
本帖最后由 kingsollyu 于 2012-10-16 10:28:45 编辑
先上代码:
		// 获取尺寸
int m_nSymbleSize = pQR_Encode->m_nSymbleSize + (QR_MARGIN * 2);

CBitmap* m_pSymbleBitmap = new CBitmap;
m_pSymbleBitmap->CreateBitmap(m_nSymbleSize, m_nSymbleSize, 1, 1, NULL);

CDC* m_pSymbleDC = ((CStatic*)GetDlgItem(IDC_BITMAP_1))->GetDC();

m_pSymbleDC->PatBlt(0, 0, m_nSymbleSize, m_nSymbleSize, WHITENESS);
m_pSymbleDC->SelectObject(m_pSymbleBitmap);

for (int i = 0; i < pQR_Encode->m_nSymbleSize; ++i)
{
for (int j = 0; j < pQR_Encode->m_nSymbleSize; ++j)
{
if (pQR_Encode->m_byModuleData[i][j])
{
m_pSymbleDC->SetPixel(i + QR_MARGIN, j + QR_MARGIN, RGB(0, 0, 0));
}
}
}
// 图片保存的结果为黑色,但上面m_pSymbleDC->SetPixel却是图案
// 此函数来自 http://hi.baidu.com/gzjurkbqwynvxye/item/d2780bc65583e853bdef6916
  SaveBitmapToFile(m_pSymbleBitmap,_TEXT("C:\\Users\\Sollyu\\Desktop\\1.bmp"));


使用如下代码完美解决

HBITMAP   CQRDlg::GetSrcBit(HDC   hDC,DWORD   BitWidth,   DWORD   BitHeight) 

HDC   hBufDC; 
HBITMAP   hBitmap,   hBitTemp; 

//创建设备上下文(HDC) 
hBufDC   =   CreateCompatibleDC(hDC); 

//创建HBITMAP 
hBitmap   =   CreateCompatibleBitmap(hDC,   BitWidth,   BitHeight); 
hBitTemp   =   (HBITMAP)   SelectObject(hBufDC,   hBitmap); 

//得到位图缓冲区 
StretchBlt(hBufDC,   0,   0,   BitWidth,   BitHeight, 
hDC,   0,   0,   BitWidth,   BitHeight,   SRCCOPY); 

//得到最终的位图信息 
hBitmap   =   (HBITMAP)   SelectObject(hBufDC,   hBitTemp); 

//释放内存 

::DeleteDC(hBufDC); 

return   hBitmap; 

------解决方案--------------------
大家前来领分,1楼20分,2楼10分,3-4楼各5分。
------解决方案--------------------
恭喜‘完美解决’
------解决方案--------------------
我来了,感谢楼主