GetPixel

解决方案 »

  1.   

    MSDN供参考:CDC::GetPixel
    COLORREF GetPixel(int x,int y) const;
    COLORREF GetPixel(POINT point) const;
    返回值
    对于函数的两种形式,则返回给定点的RGB值。如果不能在剪切区指定点的坐标,则返回-1。
    参数
    x    待检验的点的X逻辑坐标。
    y    待检验的点的Y逻辑坐标。
    point  待检验的点的X和Y逻辑坐标。
    说明
    获得X,Y指定的像素的RGB值。该点必须在剪切区内。如果不在剪切区内,函数不起作用并返回-1。
    不是所有的设备都支持GetPixel函数。要了解更多的信息,请参阅GetDeviceCaps成员函数下RC_BITBLT的光栅能力。
    GetPixel成员函数有两种形式。第一种带两个坐标值;第二种带POINT结构或CPoint对象。
    请参阅  CDC::GetDeviceCaps,CDC:: SetPixel,::GetPixel,POINT,CPoint
      

  2.   

    调用CDC::GetPixel获取RGB值:CPoint pt;
    GetCursorPos(&pt);
     
    //当到当前R,G,B,各像素值
    COLORREF color;
    CClientDC dc(this);
    color=dc.GetPixel(pt);
    BYTE rValue,gValue,bValue;
    rValue=GetRValue(color);
    gValue=GetGValue(color);
    bValue=GetGValue(color);//按格式排放字符串
    CString strRGB;
    strRGB.Format(_T("当前像素RGB(%d,%d,%d)"),rValue,gValue,bValue);
      

  3.   

    我用的是CImage CImage Img; BOOL bResult = FALSE; if (S_OK == Img.Load(szImagePath))
    {
    int nWidth = Img.GetWidth();//获取图像宽度 int nHeight = Img.GetHeight();//获取图像高度 int nWidthbytes = (Img.GetBPP() * nWidth+31) / 32 * 4;//获取图像每一行的字节数 LPBYTE lpBits = (LPBYTE)Img.GetPixelAddress(0, nHeight-1);//图片数据首地址                byte r = lpBits[(nHeight - i - 1) * nWidthbytes+j*3+2];
    byte g = lpBits[(nHeight - i - 1) * nWidthbytes+j*3+1];
    byte b = lpBits[(nHeight - i - 1) * nWidthbytes+j*3]; bResult = TRUE;
    }
    i为要读取像素点的Y,j为X....只是展示1个像素占4个字节的读法
      

  4.   

    非常感谢楼上的回答!解决了大部分问题。弱弱地问一句:RGB值指的是一个值还是三个值,还有RGB值它跟pixel值有什么不同吗?
      

  5.   

    LZ看看COLORREF的定义就知道了,建议LZ还是自己多思考思考多研究研究,不要老是问一些简单的问题
      

  6.   

    方法有几种:一:GetPixel  简单,但速度慢,特别是要取的点很多时二:GetBitmapBits、SetBitmapBits,获取/设置一个区域的图片数据,该法速度很快,至少是 GetPixel  10倍以上,感觉很明显,我自己做过一个程序,做过比较三:GetDIBits、SetDIBits,效果同 方法二,速度也差不多
      

  7.   

    RGB 是一个颜色值,而RGB颜色模式由3个基色组成,R 红,G绿,B蓝,,颜色除了 RGB 还有其他模式,如:印刷常用的是 CMYK