VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 975|回复: 1

MFC如何使用GetDIBits 获取RichEdit控件用户区像素

[复制链接]
29_avatar_middle
最佳答案
0 
在线会员 发表于 2019-9-17 15:31:51 | 显示全部楼层 |阅读模式

我使用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,应该怎样使用啊
81_avatar_middle
最佳答案
3 
online_supermod 发表于 2019-9-17 22:30:59 | 显示全部楼层
好像控件的 DC 和主窗口的不能分离开,都是画在一起的。
可以参考下这个帖子:https://bbs.csdn.net/topics/390374131
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2023-9-24 23:06

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表