|
我使用RichEdit控件编辑文本, 然后想取出RichEdit控件用户区的像素点, 再把它显示在自画的屏幕上,如上图通过GetPixel实现的
最开始我是使用GetPixel 函数,代码如下 ,其中IDC_RICHEDIT21是RichEdit控件ID
pWnd1 = GetDlgItem(IDC_RICHEDIT21);
CDC* pDC = pWnd1->GetDC();
HDC hDC = pDC->GetSafeHdc();
for(int r=0;r<wy;r++)
{
for(int l=0;l<wx/8;l++)
{
for(int b=0;b<8;b++)
{
nColor = GetPixel(hDC, l*8+b, r);
B=(0x00ff0000 & nColor) >> 16;
G=(0x0000ff00 & nColor) >> 8;
R=0x000000ff & nColor;
}
}
}
通过上面操作,是可以正常获取RichEdit控件用户区像素, 但有个问题是速度超级慢,卡得很
所以想通过GetDIBits 实现
pWnd1 = GetDlgItem(IDC_RICHEDIT21);
CDC* pDC = pWnd1->GetDC();
HDC hDC = pDC->GetSafeHdc();
HBITMAP hbmp= (HBITMAP)GetCurrentObject(hDC,OBJ_BITMAP);
BITMAP bmp;
GetObject(hbmp, sizeof(BITMAP), &bmp);
UINT * pData = new UINT[bmp.bmWidth * bmp.bmHeight];
BITMAPINFO bmpInfo;
bmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmpInfo.bmiHeader.biWidth = bmp.bmWidth;
bmpInfo.bmiHeader.biHeight = -bmp.bmHeight;
bmpInfo.bmiHeader.biPlanes = 1;
bmpInfo.bmiHeader.biCompression = BI_RGB;
bmpInfo.bmiHeader.biBitCount = 32;
GetDIBits(pDC-> m_hDC,hbmp,0,bmp.bmHeight,pData,&bmpInfo,DIB_RGB_COLORS);
但我发现通过这样获取不到, 而且bmp.bmWidth , bmp.bmHeight 的大小并不是RichEdit控件的大小, 像是整个窗口的大小
问题在哪?哪位大神帮我看看
|
上一篇: 有什么函数能以管理员方式打开程序下一篇: 哪位大佬能告诉我vs2013或vs2015的msdn,应该怎样使用啊
|