robot类里面有一个方法能获取屏幕像素 robot.getPixelColor(int x int y)返回color 对象然后color 对象里面有一个方法返回rgb值 color.getRGB()
采用scanLine(int)来获取每行的首地址。
索引就不会出现图像数据偏移的问题。
你需要首先计算出,你的图像的真实数据量(字节数), 可以根据QImagebyteCount()函数来获取图像的字节数,计算公式 byteCount = height W。
{
int x=5,y=5,width,height;//x,y是需要查找的点的坐标,从0开始
GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);//启动GDI+,方便加载位图
Bitmap bmp(_T("E:\\cbmp"));
HBITMAP hBmp = NULL;
bmpGetHBITMAP(Color(0),&hBmp);//获取位图句柄
BITMAP bi = {0};
GetObject(hBmp,sizeof(BITMAP),&bi);//获取位图信息,包括深度,宽高,步长等
width = bibmWidth;height = bibmHeight;//保存宽高
byte pBit = new byte[bibmWidthBytesbibmHeight];
::GetBitmapBits(hBmp,bibmWidthBytesbibmHeight,pBit);//获取位图数据
int n = ybibmWidthBytes + xbibmBitsPixel/8;
int out = RGB(pBit[n+2],pBit[n+1],pBit[n]);//定位到数据中获取颜色信息
GdiplusShutdown(gdiplusToken);//关闭GDI+
}
这里是用GDI+加载位图,也可以用第三方库加载位图获取位图数据然后直接定位像素,使用的时候记得加GDI+的头文件,否则编译不过
使用GDI+ bitmap 的 GetPixel,具体实现:
//像素点的坐标值,根据实际情况来
int x = 20, y = 40;
using (Bitmap bmp = new Bitmap(@"文件路径"))
{
Color pixelColor = bmpGetPixel(x, y);
//像素点颜色的 Alpha 值
byte alpha = pixelColorA;
//颜色的 RED 分量值
byte red = pixelColorR;
//颜色的 GREEN 分量值
byte green = pixelColorG;
//颜色的 BLUE 分量值
byte blue = pixelColorB;
}
pData里面保存的就是一个一个的COLORREF结构,你只需要通过BITMAPINFOHEADER中的宽高等信息,计算位移,就可以读取某个点的RGB值了。
还有一个简单的办法,你之前已经有memBitmap这个CBitmap了,通过这个做更方便。通过SelectObject将memBitmap放到一个CDC中,直接使用函数GetPixel函数就可以获取指定某个点的RGB值了,这个不需要计算和位移。
针对某张rgb的某一色块进行“可选颜色”修改,判断方法如下:
1使用图像处理软件打开RGB,选择取色工具,获取需要修改的色块的RGB数值。
2确定该色块的RGB值范围,例如:R(100-150),G(200-255),B(0-50)。
3按照需要修改的颜色范围,使用图像处理软件的调色板或调整图像颜色的功能,选择需要的颜色,进行修改。
4修改后,可以使用颜色取样工具再次检查该色块的RGB值是否符合修改后的范围。
RGB是一种由红色(R)、绿色(G)和蓝色(B)三种颜色组成的图像格式,也被称为真彩色、全彩色或者三基色。
以上就是关于android编程 如何在service中获取屏幕每个像素点的RGB值全部的内容,包括:android编程 如何在service中获取屏幕每个像素点的RGB值、qimage::fromData获取RGB数据怎么判断图片尺寸、如何用C++获取一张bmp图片(24位)的RGB量及长宽等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)