我在窗体上放了一个影像控件(可以接入由显微镜传入电脑的图像,并且影像是移动的),
然后在影像控件上画了一个固定的十字线,由十字线的交点来读取影像上这一点的颜色值.
现在可以读取影像移动的距离(就像摄像头中显示物体移动一样),但是却无法读取这个
点的颜色值,请大侠指点一下,如需这个控件请留下email.
谢谢!

解决方案 »

  1.   

    这是VC++中的,你参考一下:
    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
      

  2.   

    另,我的email:  [email protected]
      

  3.   

    ---------------------------------------------------------------  
    方法一:  
    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判断设备是否支持本函数
     
      

  4.   

    我也想看看,我的邮件:[email protected]
    谢谢!