我在窗体上放了一个影像控件(可以接入由显微镜传入电脑的图像,并且影像是移动的),
然后在影像控件上画了一个固定的十字线,由十字线的交点来读取影像上这一点的颜色值.
现在可以读取影像移动的距离(就像摄像头中显示物体移动一样),但是却无法读取这个
点的颜色值,请大侠指点一下,如需这个控件请留下email.
谢谢!
然后在影像控件上画了一个固定的十字线,由十字线的交点来读取影像上这一点的颜色值.
现在可以读取影像移动的距离(就像摄像头中显示物体移动一样),但是却无法读取这个
点的颜色值,请大侠指点一下,如需这个控件请留下email.
谢谢!
1、获取屏幕DC
HDC hDC = ::GetDC(NULL); //获取屏幕DC
2、获取当前鼠标位置像素值
CPoint pt;
GetCursorPos(&pt); //得到当前鼠标所在位置
COLORREF clr = ::GetPixel(hDC, pt.x, pt.y); //获取当前鼠标点像素值
3、分解出像素点中的红、绿、蓝颜色值
CString ClrText;
ClrText.Format("%d",GetRValue(clr)); //分解出红色值
ClrText.Format("%d",GetGValue(clr)); //分解出绿色值
ClrText.Format("%d",GetBValue(clr)); //分解出蓝色值
::ReleaseDC(NULL, hDC); //释放屏幕DC
方法一:
Public Function GetRedValue(Color As Long) As Integer
GetRedValue = Color And &HFF
End Function
Public Function GetGreenValue(Color As Long) As Integer
GetGreenValue = (Color And 65280) \ 256
End Function
Public Function GetBlueValue(Color As Long) As Integer
GetBlueValue = (Color And &HFF0000) \ 65536
End Function
---------------------------------------------------------------
方法二:
Option Explicit
Private Sub Command1_Click()
GetRGB RGB(16, 39, 0)
End Sub
Sub GetRGB(ByVal color As Long, Optional ByRef red As Byte, Optional ByRef green As Byte, Optional ByRef blue As Byte)
Dim temp As String
temp = Right("000000" & Hex(color), 6)
red = "&H" & Right(temp, 2)
green = "&H" & Mid(temp, 3, 2)
blue = "&H" & Left(temp, 2)
End Sub
---------------------------------------------------------------
方法三:
R = Color And &HFF& '通过和16进制数FF进行“与”操作取得低8位
G=(Color\256) And &HFF& '先右移8位,再取低8位,相当于原来的中间8位
B = Col \ 65536 '右移16位,得到的8位,相当于原来的高8位
还有一种写法:
R = Color Mod 256
G = (Color\256) Mod 256
B = Color \65536
这种写法和上面的区别在于使用了“取余数”运算符Mod,结果和上面一样
================================================================================
GetPixel VB声明
Declare Function GetPixel Lib "gdi32" Alias "GetPixel" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
说明
在指定的设备场景中取得一个像素的RGB值
返回值
Long,指定点的RGB颜色。如指定的点位于设备场景的剪切区之外,则返回CLR_INVALID
参数表
参数 类型及说明
hdc Long,一个设备场景的句柄
x,y Long,逻辑坐标中要检查的点
注解
用GetDeviceCaps判断设备是否支持本函数
谢谢!