-
-
[旧帖]
求助,关于SetPixel的问题
0.00雪花
-
发表于:
2012-10-18 11:24
4306
-
[旧帖] 求助,关于SetPixel的问题
0.00雪花
前言:我写了一个 二维码 的小软件,想在界面上显示生成出来的二维码
问题:1.显示的二维图像太小。2.一刷新就没了。
小弟折腾了已经将近3-4天了,百度和谷歌都无果,所以前来求大神指点。小弟先声谢过了。
上一下我的代码:
BOOL CQRDlg::OnInitDialog()
{
m_pSymbleDC = ((CStatic *)GetDlgItem(IDC_BITMAP_1))->GetDC();
}
void CQRDlg::OnBnClickedButton1()
{
CQR_Encode* pQR_Encode = new CQR_Encode;
int nLevel = m_comboLevel.GetCurSel();
int nVersion = QR_VRESION_L;
int nMaskingNo = 1;
BOOL bAutoExtent = TRUE;
CString strEdit1;
GetDlgItemText(IDC_EDIT1,strEdit1);
m_bDataEncoded = pQR_Encode->EncodeData(nLevel, nVersion, bAutoExtent, nMaskingNo, CStringA(strEdit1).GetString());
if (m_bDataEncoded)
{
//------------------------------------------------------------------------------
// 主要是这里出现问题
//------------------------------------------------------------------------------
// 获取尺寸
m_nSymbleSize = pQR_Encode->m_nSymbleSize + (QR_MARGIN * 2);
CBitmap *m_pSymbleBitmap = new CBitmap;
m_pSymbleBitmap->CreateCompatibleBitmap(m_pSymbleDC,m_nSymbleSize,m_nSymbleSize);
// 将背景填充为白色
m_pSymbleDC->PatBlt(0, 0, m_nSymbleSize, m_nSymbleSize, WHITENESS);
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])
SetPixel(m_pSymbleDC->GetSafeHdc(),i + QR_MARGIN, j + QR_MARGIN, RGB(0, 0, 0));
}
}
// 获得HBITMAP主要用来以后保存为bmp文件
hBitmap = GetSrcBit(m_pSymbleDC->GetSafeHdc(),m_nSymbleSize,m_nSymbleSize);
}
delete pQR_Encode;
}
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;
}
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课