在Windows下用C语言实现屏幕取色


                看了一些取色器的文章,发现没有找到用C语言写的,决定自己写一个。

              本文用的是Windows 提供的API ,还需要一个gdi32.dll, 这个文件一般放在系统盘的WINDOWS/System32下面。以下是用到的Windows API的一些链接。

             https://msdn.microsoft.com/en-us/library/windows/desktop/dd144909(v=vs.85).aspx

            https://msdn.microsoft.com/en-us/library/windows/desktop/ms648390(v=vs.85).aspx

            

#include<Windows.h>  
#include<stdio.h> 

int main()  
{  
   
    LONG zx = -1;  
    LONG zy = -1;  
   
        
   HMODULE hModule = NULL;
   typedef COLORREF (*Func)(HDC hdc, int a, int b);         //使用动态链接库要用的函数 
       
   
    hModule=LoadLibrary("gdi32.dll");                //加载动态链接库 
    POINT ptB = { 0, 0 };
    LPPOINT xy = &ptB;
    COLORREF cr;
     int  x = 5; 
     int  y = 5;
     HDC hdc = GetDC(NULL);
    Func fu = (Func)GetProcAddress(hModule, "GetPixel" );               //这是使用动态链接库gdi32.dll里面 的函数 GetPixel 
    
      while (1)  
    {                 
           
        GetCursorPos(xy);   //获取鼠标当前位置    
		    
        /*如果鼠标移动,(即当前的坐标改变则打印出坐标)打印出做坐标。  */ 
        if ((zx != xy->x) || (zy != xy->y))  
        {  
            cr = fu(hdc, xy->x, xy->y);     //获取鼠标位置的像素值信息
			 
            int a = GetRValue(cr);           //获取红色 
            int b = GetGValue(cr);           //获取绿色 
            int c = GetBValue(cr);           //获取蓝色
			 
            printf("x=%d,y=%d\n", xy->x, xy->y);           //打印鼠标位置   
			printf("rgba( %d, %d, %d)\n\n",a,b,c);           //打印rgb值 
            zx = xy->x;   
            zy = xy->y;  
        }             
    }   
    
    
     FreeLibrary(hModule);             //释放指针 
        
}  


 


              

               写这个取色的过程,也让自己有所收获。复习了如何使用动态链接库,学会通过MSDN来去查阅资料等。

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值