我做了一个拾色器,移动鼠标就能在无模式对话框中显示灰度图中该点的R G B值,R和B的值一样,G值却比R和B值少2或3,按理说灰度图中RGB值应是一样的,事实上,同一幅灰度图象,我在Photoshop中用拾色器取RGB值时发现RGB值确实是一样的,我用的代码为
clr = ::GetPixel(hDC,point.x, point.y);
CString ClrText;
    ClrText.Format("%d",GetRValue(clr));
    m_Red.SetWindowText(ClrText);
    ClrText.Format("%d",GetGValue(clr));
    m_Green.SetWindowText(ClrText);
    ClrText.Format("%d",GetBValue(clr));
    m_Blue.SetWindowText(ClrText);
不知大家是否遇到过同样的问题,有没有好的解决方法。

解决方案 »

  1.   

    我一般是这样取RGBA值的,你可以试一下
    COLORREF AlphaGetPixel(CDC* pDC,UINT x,UINT y)
    {
     CDC hmemdc;
     CBitmap hbitmap;
     COLORREF color;
    hbitmap.CreateBitmap(1,1,1,32,NULL);
    hmemdc.CreateCompatibleDC(pDC);
    hmemdc.SelectObject(&hbitmap);
    hmemdc.BitBlt(0,0,1,1,pDC,x,y,SRCCOPY);
    hbitmap.GetBitmapBits(4,&color);
    hmemdc.DeleteDC();
    hbitmap.DeleteObject();
    return color;
    }
      

  2.   

    CPoint pt;
        GetCursorPos(&pt);    HDC hDC = ::GetDC(NULL);
        COLORREF clr = ::GetPixel(hDC, pt.x, pt.y);
        
       CString ClrText;
        ClrText.Format("%d",GetRValue(clr));
    m_EditRed.SetWindowText(ClrText);
    ClrText.Format("%d",GetGValue(clr));
    m_EditGreen.SetWindowText(ClrText);
    ClrText.Format("%d",GetBValue(clr));
    m_EditBlue.SetWindowText(ClrText);
       
        ::ReleaseDC(NULL, hDC);
      

  3.   

    和我写的一样,但我不能得到我所需要的结果,::ReleaseDC(NULL, hDC)我也写了,只不过没有加到帖子中去
      

  4.   

    有个问题:内存中的图象到显示器上要经过gamma效正等补偿输出。鼠标获取的象素点的实现原理是什么,是读取内存中图象的象素点吗?