如何获取图片框中图片上某一点的颜色?vc6+xp
附注:在onctrlcolor中用pDC->getpixel()方法
不行。

解决方案 »

  1.   


    CPaintDC dc(this);
    dc.getpixel(100, 100);
      

  2.   

    1,用GetDlgItem获得图片框句柄
    2,再用GetDC获得图片框的设备对象
    3,再用GetPixel(x,y)活动(x,y)的RGB
    例子:
    CWnd *Pwnd=GetDlgItem(ID_PICTURE);
    CDC *pDC=Pwnd->GetDC();
    CORLORREF color=pDC->GetPixel(x,y);//获得象素颜色
      

  3.   

    CWnd   *Pwnd=GetDlgItem(ID_PICTURE); 
    CDC   *pDC=Pwnd-> GetDC(); 
    CORLORREF   color=pDC-> GetPixel(x,y);//
      

  4.   

    在onctrlcolor中用pDC-> getpixel()方法 
    不行。
    -----------------------
    这个pDC必须是图片框的DC而不是对话框的DC,注意区分
      

  5.   

    获取颜色用getpixel肯定是行的,至于你无法得到真正的结果,我估计可能是dc用错了,你图片是贴在哪里的?如果你是紧用一个图片框来限定图片的范围,而图片是贴在对话框上的那么就用对话框的dc,如果是贴在图片框上的那么就用图片框的dc,另外还有一点就是去色之前保证图片已经贴出来了;
    另外一种方法是把图片加载到内存dc中去,然后从内存dc中去色。
      

  6.   

    我用图片框的DC好像也不好用,不知道为什么。这是我的测试代码:
             CRect rect, rect1;
            COLORREF cr;
    CDC *cdc;
    HDC hdcScreen;
            int i=0;
    GetWindowRect(&rect);
    GetDlgItem(IDC_BMP)->GetWindowRect(&rect1);
    cdc = GetDlgItem(IDC_BMP)->GetDC();
    cr=cdc->GetPixel(i,i);
    有的时候读到的是我自己设置的背景色,有的时候是-1.
    其实,我的整幅图片就一种颜色,能够取到任意一点的颜色就可以了。
    非常感谢前面网友的参与。
    期望能够有更好的回答。
      

  7.   

    问题还没解决吗?
    直接取窗口DC(this->GetDC),然后GetPixel就可以了。注意要把屏幕坐标转换成窗口内的相对坐标。
      

  8.   

    前面的方法我也都试过,没有成功,不知道哪里还是有问题,如果有哪位高手能够提供完整的代码就好了。
    有一个很笨但是肯定好用的方法能够完成取颜色的工作,当然了,前提是你的图片的颜色很简单,而且不是
    经常改变用颜色一点点试试,比如,估计(8,8)这一点的颜色是RGB(128,128,128),就用该颜色在此处
    画圆,对比后再修改。应该可以满足要求。
      

  9.   

    void CTest4Dlg::OnMouseMove(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default

    CPoint pt;
        GetCursorPos(&pt);    HDC hDC = ::GetDC(NULL);
        COLORREF cl = ::GetPixel(hDC, pt.x, pt.y);
        
    int red,green,blue; red   =   GetRValue(cl); 
    green   =   GetGValue(cl); 
    blue   =   GetBValue(cl);     ::ReleaseDC(NULL, hDC);
    CDialog::OnMouseMove(nFlags, point);
    }