当前位置: 行情首页 >> 技术文章 >> 最快的取点方法? VC/MFC

  • 最快的取点方法? VC/MFC / 基础类
  • 2007-10-22 9:56:04 杭州电脑数码城 转载来源:csdn.net
  • 社区 - VC/MFC / 基础类

    最快的取点方法?

    TBBT (谁能读懂我的心) 2000-03-01 22:24:00在 VC/MFC / 基础类 提问

    因为出差,小别了几天,现又有一问题需请教各位大虾:

    因工作需要,需抓取PICTUREBOX或屏幕任一区域的点的颜色,我试了几种方法,如GETPIXEL,但仍太慢。是否有类似GETIMAGE的函数,可把一个区域的颜色直接符给
    一个数组?



    问题点数:50、回复次数:3

    1楼 gauss (Powered-by-Internet) 回复于 2000-03-01 23:47:00 得分 0


    可否创建一个MemDC,再得到Desktop或你要的窗口的WndDC,从WndDC BitBlt 到 MemDC,就可以通过访问MemDC联系着的Bitmap的内容(是一个数组来的)来知道你要的颜色了。
    希望能帮得上你,
    如果你用这个方法解决了问题,请告知我。
    如果有另外的方法,也请你告诉我。

    2楼 zqy () 回复于 2000-03-01 23:59:00 得分 50


    如果你是在MS Windows下,可以这样做:

    //在24位真彩模式下
    //把屏幕上的0,0,100,100的点信息抓下来
    UINT cx=100,cy=100;//cx=width,cy=height
    UINT x=0,y=0;//x=startX,y=startY

    BITMAPINFO bitmapInfo;
    unsigned char * pBuffer=new unsigned char[cx*cy*3];
    memset(pBuffer,0,sizeof(char)*(cx*cy*3));
    memset(&bitmapInfo,0,sizeof(BITMAPINFO));

    HDC hScreenDC = ::GetDC(NULL);
    HDC hMemDC = ::CreateCompatibleDC(hScreenDC);
    HBITMAP hBitmap = ::CreateCompatibleBitmap(hScreenDC,cx,cy);
    ::SelectObject(hMemDC,hBitmap);
    ::BitBlt(hMemDC,0,0,cx,cy,hScreenDC,x,y,SRCCOPY);

    bitmapInfo.bmiHeader.biWidth=cx;
    bitmapInfo.bmiHeader.biHeight=cy;
    bitmapInfo.bmiHeader.biBitCount=24;
    bitmapInfo.bmiHeader.biPlanes=1;
    bitmapInfo.bmiHeader.biSizeImage=cx*cy*3;
    bitmapInfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);

    ::GetDIBits(hMemDC,hBitmap,0,cy,pBuffer,&bitmapInfo,DIB_RGB_COLORS);
    //... you do here
    delete []pBuffer;
    ::ReleaseDC(NULL,hScreenDC);
    ::DeleteDC(hMemDC);
    ::DeleteObject(hBitmap);

    3楼 softdoctor (软件医生) 回复于 2000-03-02 00:10:00 得分 0


    zqy同志说的对极了!

竟价广告:

    业界行情新闻声明事项:

    • ☉本网转载出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性!
    • ☉如其他媒体、网站或个人从本网下载使用,必须保留本网注明的“稿件来源”,并自负版权等法律责任。如对稿件内容有疑议,请及时与我们联系.
    • ☉如本网转载稿涉及版权等问题,请作者在速来电或来函与杭州电脑数码城网联系.
    • ☉本站网址:http://www.ititt.com/投诉邮箱:6371222@qq.com