纯C语言开发实时显示当前鼠标所在位置的RGB值HSV值。源码分享。豆包AI出品。

发布于:2025-09-12 ⋅ 阅读:(16) ⋅ 点赞:(0)

#include <stdio.h>
#include <windows.h>
#include <math.h>

// RGB转HSV的函数
void rgb2hsv(int r, int g, int b, float *h, float *s, float *v) {
    float rf = r / 255.0f;
    float gf = g / 255.0f;
    float bf = b / 255.0f;

    float max_val = fmaxf(rf, fmaxf(gf, bf));
    float min_val = fminf(rf, fminf(gf, bf));
    float delta = max_val - min_val;

    // 计算V
    *v = max_val;

    // 计算S
    if (max_val == 0) {
        *s = 0;
    }
    else {
        *s = delta / max_val;
    }

    // 计算H
    if (delta == 0) {
        *h = 0; // 无色
    }
    else {
        if (max_val == rf) {
            *h = fmodf(((gf - bf) / delta), 6);
        }
        else if (max_val == gf) {
            *h = ((bf - rf) / delta) + 2;
        }
        else { // max_val == bf
            *h = ((rf - gf) / delta) + 4;
        }

        *h *= 60; // 转换为度数

        if (*h < 0) {
            *h += 360;
        }
    }
}

int main() {
    POINT mousePos;
    HDC hdcScreen;
    COLORREF pixelColor;
    int r, g, b;
    float h, s, v;
    char key;

    printf("实时鼠标位置及颜色监视器\n");
    printf("按ESC键退出程序\n\n");

    hdcScreen = GetDC(NULL); // 获取整个屏幕的设备上下文

    while (1) {
        // 检查是否按下ESC键
        if (GetAsyncKeyState(VK_ESCAPE) & 0x8000) {
            break;
        }

        // 获取鼠标位置
        GetCursorPos(&mousePos);

        // 获取指定位置的像素颜色
        pixelColor = GetPixel(hdcScreen, mousePos.x, mousePos.y);

        // 提取RGB分量
        r = GetRValue(pixelColor);
        g = GetGValue(pixelColor);
        b = GetBValue(pixelColor);

        // 转换为HSV
        rgb2hsv(r, g, b, &h, &s, &v);

        // 清除当前行并显示信息
        printf("\r位置: (%4d, %4d)  RGB: (%3d, %3d, %3d)  HSV: (%.1f°, %.1f%%, %.1f%%)  ",
            mousePos.x, mousePos.y,
            r, g, b,
            h, s * 100, v * 100);

        // 刷新输出缓冲区
        fflush(stdout);

        // 短暂延迟,减少CPU占用
        Sleep(50);
    }

    ReleaseDC(NULL, hdcScreen); // 释放设备上下文
    printf("\n程序已退出\n");

    return 0;
}
 


网站公告

今日签到

点亮在社区的每一天
去签到