vb如何查找像素读取颜色

vb如何查找像素读取颜色,第1张

既然小方框的边为纯黑色,那么还是比较好找出小方框的位置的。 假设小方框的大小是不变的(我不知道是否会变,长为a,宽为b,单位pt) 1,通过api取点的颜色。2,因为只找左右的两条边,所以从上到下跳越式的搜索(步长<=小方框的宽度b)3,每跳一下,就从左至右的逐像素的搜索,如果找到黑色的点,就上下连续搜索一定数量的点 如果全部为黑色,则证明是一条黑线,说明找到了左边,在左边的基本上,加上宽度,就是右边了。 在此右边还可以用来校验搜索的结果是否正确。4,找到了左右两条边的位置,剩下的就设置你的竖线的位置。 下面给出大体上的代码: GetPixel函数是获取设备指定点颜色值的。 for y = 0 to yMax step b-1for x=0 to xMax if GetPixel(hdc,x,y) =vbBlack then '向上搜索一定数量的点,判断是否全部为黑色 ' '向下搜索一定数量的点,判断是否全部为黑色 ' end ifnextnext

robot类里面有一个方法能获取屏幕像素 robotgetPixelColor(int x, int y) 返回color 对象 然后color 对象里面有一个方法返回rgb值 colorgetRGB()

Bitmap bit = new Bitmap(ScreenPrimaryScreenWorkingAreaWidth, ScreenPrimaryScreenWorkingAreaHeight);

Graphics g = GraphicsFromImage(bit);

gCopyFromScreen(0, 0, 0, 0, ScreenPrimaryScreenWorkingAreaSize);

Color c =bitGetPixel(10, 10);

先屏幕截图,然后取颜色

'使用DIB获取图象,根据他人代码修改,ImgData()中保存的是颜色

Private Declare Function GetDIBits Lib "gdi32" (ByVal aHDC As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long

Private Declare Function SetDIBits Lib "gdi32" (ByVal hdc As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long

Private Type BITMAPINFOHEADER '40 bytes

biSize As Long

biWidth As Long

biHeight As Long

biPlanes As Integer

biBitCount As Integer

biCompression As Long

biSizeImage As Long

biXPelsPerMeter As Long

biYPelsPerMeter As Long

biClrUsed As Long

biClrImportant As Long

End Type

Private Type RGBQUAD

rgbBlue As Byte

rgbGreen As Byte

rgbRed As Byte

rgbReserved As Byte

End Type

Private Type BITMAPINFO

bmiHeader As BITMAPINFOHEADER

bmiColors As RGBQUAD

End Type

Private Const DIB_RGB_COLORS = 0 ' color table in RGBs

Private Sub Command1_Click()

Picture1Line (0, 0)-(Picture1Width, Picture1Height), vbRed

Dim BITMAP As BITMAPINFO

Dim ImgData() As Byte'图象颜色

Dim lIndex As Long

Dim i As Long, j As Long, n As Long, t As Long, m

With BITMAP

bmiHeaderbiSize = 40 'BMP30版本

End With

If GetDIBits(Picture1hdc, Picture1PictureHandle, 0, 0, 0, BITMAP, DIB_RGB_COLORS) <> 0 Then '获取图像位图数据大小

ReDim ImgData(BITMAPbmiHeaderbiSizeImage - 1) '重定义数组准备接收位图数据

If GetDIBits(Picture1hdc, Picture1PictureHandle, 0, BITMAPbmiHeaderbiHeight, ImgData(0), BITMAP, DIB_RGB_COLORS) <> 0 Then '正式获取位图数据并将数据存入定义的数组中

'注意数组中颜色分量的存储顺序为:B、G、R(并不是R、G、B),如果你需要对图像进行处理只需改变数组中的数据即可完成

'我试验的位图62x62像素,24色图,3字节存储,每行188字节(一个扫描行的长度必须是4的倍数),这样扫描后共11656字节

' 下面这段程序是将图像亮度变暗(只作为演示,其它效果你可以自己动手做)

'注意:第一条扫描线的位置是从左下角开始

'BITMAPbmiHeaderbiHeight 位图的高度,单位是像素

'BITMAPbmiHeaderbiWidth 位图的宽度,单位是像素

'BITMAPbmiHeaderbiBitCount 图像的颜色位数

'每个像素点的颜色是:(从下往上)

t = ((BITMAPbmiHeaderbiWidth 3 + 3) \ 4) 4 '每行的字节数

For i = 1 To BITMAPbmiHeaderbiHeight

DoEvents

m = t (i - 1)

For j = 1 To BITMAPbmiHeaderbiWidth

n = m + (j - 1) 3

DebugPrint "(" & i & "," & j & ")" & n & ": R=" & ImgData(n) & " G=" & ImgData(n + 1) & " B=" & ImgData(n + 2)

Next

Next

For lIndex = 0 To BITMAPbmiHeaderbiSizeImage - 1

DoEvents

If ImgData(lIndex) - 100 < 0 Then

ImgData(lIndex) = 0

Else

ImgData(lIndex) = ImgData(lIndex) - 100

End If

Next

'

SetDIBits Picture2hdc, Picture2ImageHandle, 0, BITMAPbmiHeaderbiHeight - 1, ImgData(0), BITMAP, DIB_RGB_COLORS '将位图数据写入PICTURE2中

End If

End If

End Sub

GetPixel

>

这是在一个对话框窗口中通过移动鼠标获取颜色值的实现代码,你可以参考:

void CGetRGBDlg::OnMouseMove(UINT nFlags, CPoint point)

{

//获取窗体DC

CDC pDC = GetDC();

//获取颜色值

COLORREF cr = pDC->GetPixel(point);

//提取RGB分量

m_nR = GetRValue(cr);//R值

m_nG = GetGValue(cr);//G值

m_nB = GetBValue(cr);//B值

//显示RGB值

UpdateData(FALSE);

CDialog::OnMouseMove(nFlags, point);

}

如果还不明白我可以给你写个演示代码。

百度HI 找 我

以上就是关于vb如何查找像素读取颜色全部的内容,包括:vb如何查找像素读取颜色、如何在内存DC中调用GetPixel获取像素点颜色值、C#调用GetPixel函数怎么去全屏窗口的某个坐标颜色啊等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9629881.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存