• 一个现代Direct2D平原Win32的颜色选择器


    介绍 通常,我想要一个选择器或一个漂亮的HSL滑块或一个alpha通道。下面是一个用于代码的单文件库,它与Direct2D一起工作,并为选择颜色提供了一个现代界面。 使用的代码 你有一个单一的函数调用: 隐藏,复制Code

    #include "colorpick.hpp"
    COLORPICK p;
    D2D1_COLOR_F c1 = {1.0f,0,0,1.0f}; // init with red
    HRESULT hr = p.Show(0, c);
    if (hr == S_OK) { ... } // Color is set

    还有可能,传递一个带有更多选项的可选结构: 隐藏,复制Code

    struct COLORPICKOPT
    {
        bool Alpha = 1;
        int Mode = 1;
        float rsl = 0.1f;
        bool Dlg = 1;
        bool LUpdate = 0;
        bool AlsoUseSystem = 1;
        bool UsePicker = 1;
        float Resolution = 0.1f;
    };

    深入它 RGB和奥软 让我们深入研究一下。从RGB到HSL以及从HSL到RGB的转换是通过fromRGBtoHSL和fromHSLtoRGB函数完成的——请参阅更多内容。 画 所有的绘图都是由一个ID2D1HwndRenderTarget完成的,它将在WM_PAINT上创建。这,取决于使用的模式,将: 绘制117个方块与预先定义的颜色为RGB模式(从这里)。在HSL模式下画一个色轮。色轮是逐像素、逐线绘制的。每一行都有一个指定的色相值,当旋转时,它的最大值为360。,整个圆。这条线的半径是颜色的饱和度。色调滑块是用一个360值的Direct2D直线笔刷绘制的。 色相条可以用线性画笔绘制: 隐藏,收缩,复制Code

    std::vector<D2D1_GRADIENT_STOP>  gst(360);
    for (int i = 0; i < 360; i++)
    {
        float hsl[3] = { 1,1,L };
        hsl[0] = (360 -  i) / 360.0f;
        hsl[0] *= 6.0f;
        float rgb[3] = {};
        fromHSLtoRGB(hsl, rgb);
        gst[i].position = i / 360.0f;
        gst[i].color.r = rgb[0];
        gst[i].color.g = rgb[1];
        gst[i].color.b = rgb[2];
        gst[i].color.a = 1.0f;
    }
    pGradientStops = 0;
    lbr = 0;
    p->CreateGradientStopCollection(
        gst.data(),
        360,
        D2D1_GAMMA_2_2,
        D2D1_EXTEND_MODE_CLAMP,
        &pGradientStops
    );
    p->CreateLinearGradientBrush(
        D2D1::LinearGradientBrushProperties(
            D2D1::Point2F(LRect.left, LRect.top),
            D2D1::Point2F(LRect.right, LRect.bottom)),
        pGradientStops,
        &lbr);

    这个线性渐变笔刷现在可以用来绘制色相条。其他线条(S、L或R、G、B、Alpha)都是纯实心笔刷。 键盘 WM_COMMAND和WM_KEYDOWN处理IDOK/IDCANCEL和VK_RETURN/VK_ESCAPE提交或取消颜色选择。 内联编辑 点击Alpha值,R,G,B(在RGB模式下)或H,S,L(在HSL模式下)值会显示一个内联编辑框(带有ES_NUMBER),允许你输入一个值(0-350表示H, 0-100表示Alpha, 0-255表示其他)。当编辑处于活动状态时,VK_RETURN/VK_ESCAPE作用于编辑值。 鼠标操作 点击: RGB值来选择点击的颜色,色轮来选择点击的颜色,R,G,B或H,S,L条来设置值,Alpha, R,G,B或H,S,L值来内联编辑值 阻力: RGB或HSL条设置值,色轮设置HSL值 轮行动: 在条上旋转值,在RGB/HSL值上旋转值 系统对话框 公共对话框选择器可以用于那些习惯它的人。按“S”键将显示常用对话框,并设置/获取所选值。 的选择器 通常情况下,你想选择你看到的颜色,但你不能说出它的名字。控件包括一个选择器,你可以点击它,然后把它拖到屏幕上(在颜色选择器之外),它会捕获它下面的任何颜色。它使用SetCapture API。 的参数 bool Alpha = 1;默认情况下,颜色选择器也显示alpha控件。如果你不想改变,传递0给它。返回的颜色将有一个1.0f的alpha值。int模式= 1;//从RGB开始。如果为0,则从HSL开始。bool Dlg = 1;//如果为0,则为窗口而不是对话框。bool LUpdate = 0;//如果1,在设置L时,色轮更新(较慢)bool = 1;//显示允许使用系统通用控件bool UsePicker = 1的“S”按钮;//显示启用选择器时的十字浮动分辨率= 0.1f;//色轮分辨率(较小值->较小的速度比;更好的视图) 这个项目 # include colorpick。hpp在您的应用程序中,您准备好了。github回购包括一个示例解决方案,您可以学习。 历史 2020年6月2日-第一次发布 本文转载于:http://www.diyabc.com/frontweb/news2548.html

  • 相关阅读:
    【ML】【HMM】【转】隐马尔可夫模型(HMM)简介
    【ML】对线性回归,logistic回归和广义线性回归的认识
    【CT】【转】 P,NP,NPcomplete,NPhard
    【python】python path,macports,easyinstall,numpy,scipy,ipython,matplotlib,集成工具
    【ML】【转】关于主成分分析的五个问题
    【mat】matlab矩阵运算及函数
    【CT】【转】第一个 NPcomplete 问题
    【ML】VC dimension
    【CT】递归语言的性质
    【CT】Universal Turing Machine
  • 原文地址:https://www.cnblogs.com/Dincat/p/13458006.html
Copyright © 2020-2023  润新知