看了一些取色器的文章,发现没有找到用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来去查阅资料等。