怎样用MFC求JPG图片任一像素点的RGB值 GetPixel 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 MSDN供参考:CDC::GetPixelCOLORREF 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 调用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); 我用的是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个字节的读法 非常感谢楼上的回答!解决了大部分问题。弱弱地问一句:RGB值指的是一个值还是三个值,还有RGB值它跟pixel值有什么不同吗? LZ看看COLORREF的定义就知道了,建议LZ还是自己多思考思考多研究研究,不要老是问一些简单的问题 方法有几种:一:GetPixel 简单,但速度慢,特别是要取的点很多时二:GetBitmapBits、SetBitmapBits,获取/设置一个区域的图片数据,该法速度很快,至少是 GetPixel 10倍以上,感觉很明显,我自己做过一个程序,做过比较三:GetDIBits、SetDIBits,效果同 方法二,速度也差不多 RGB 是一个颜色值,而RGB颜色模式由3个基色组成,R 红,G绿,B蓝,,颜色除了 RGB 还有其他模式,如:印刷常用的是 CMYK MSDN安装失败 求助 CoCreateInstance和CoGetClassObject功能一样吗,能否互相替代? CByteArray类型数据写入文件后怎么是乱码呢? release版本动态链接mfc库在没有装vc的机器上面为什么能够正常运行???? 一个窗口显示的问题。 VC程序调试问题 大家讨论一下可提高显示速度的直接写屏方式? 难题!大家看看啊 看见过CFileDialog有这种现象吗?很是费解呀。。。。。。。。。 修改代码后,编译的结果和未修改前是一样的 VC++打印及打印预览 win8中 socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)阻塞求助
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
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);
{
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个字节的读法