码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • WPF绘制圆形调色盘


    本文使用writeableBitmap类和HSB、RGB模式来绘制圆形的调色盘。

    开源项目地址:https://github.com/ZhiminWei/Palette

    RGB为可见光波段三个颜色通道,灰度值范围为0-255,HSB模式,H是色相:取值范围0-360°,S是饱和度:取值范围0-100%,B是亮度:取值范围是0-100%,本文仅展示了部分代码,详细代码见上述项目地址。
    程序截图:
    image

    中国传统色示例:
    image


    渲染圆形调试盘主要代码
    		private void RenderColorPicker(double brightness)
            {
                bitmap = new WriteableBitmap(radius * 2 + 20, radius * 2 + 20, 96.0, 96.0, PixelFormats.Pbgra32, null);
                Utility.DrawingAllPixel(bitmap, (x, y) =>
                {
                    RGBColor rgb = new RGBColor(255, 255, 255, 0);
                    double H = 0;
                    Vector vector = Point.Subtract(new Point(x, y), new Point(radius + 10, radius + 10));
                    var angle = Math.Atan(vector.Y / vector.X) * 180 / Math.PI;
                    if (vector.X < 0)
                    {
                        H = 270 + angle;
                    }
                    else if (vector.X > 0)
                    {
                        H = 90 + angle;
                    }
                    else
                    {
                        if (vector.Y < 0)
                        {
                            H = 0;
                        }
                        else if (vector.Y > 0)
                        {
                            H = 180;
                        }
                        else
                        {
                            return new RGBColor(255, (int)(255 * brightness), (int)(255 * brightness), (int)(255 * brightness));
                        }
                    }
                    //计算饱和度
                    double S;
                    if (vector.Length >= radius)
                    {
                        S = 1;
                    }
                    else
                    {
                        S = vector.Length / radius;
                    }
                    //亮度值
                    double B = brightness;
                    return new HSBColor(H, S, B).RgbColor;
                });
                this.img.Source = bitmap;
            }
    		
    		/// 
            /// 绘制所有像素
            /// 
            /// 
            /// 
            public static void DrawingAllPixel(WriteableBitmap bitmap, Func func)
            {
                //跨距 :针对跨距(stride)的计算,WritePixels()方法需要跨距。
                //从技术角度看,跨距是每行像素数据需要的字节数量。
                //可通过将每行中像素的数量乘上所使用格式的每像素位数(通常为4,如本例使用的Bgra32格式)
                //然后将所得结果除以8,进而将其从位数转换成字节数。
                int stride = bitmap.PixelWidth * bitmap.Format.BitsPerPixel / 8;
    
                for (int y = 0; y < bitmap.PixelHeight; y++)
                {
                    for (int x = 0; x < bitmap.PixelWidth; x++)
                    {
                        var rgb = func.Invoke(x, y);
                        byte[] colorData = new byte[4] { (byte)rgb.B, (byte)rgb.G, (byte)rgb.R, (byte)rgb.A };
    
                        bitmap.WritePixels(new Int32Rect(x, y, 1, 1), colorData, stride, 0);
                    }
                }
            }
    		
    
  • 相关阅读:
    人工智能,丹青圣手,全平台(原生/Docker)构建Stable-Diffusion-Webui的AI绘画库教程(Python3.10/Pytorch1.13.0)
    [附源码]java毕业设计高校流动党员信息管理系统
    如何确定论文研究方向,看了很多论文还是没有头绪?
    【电路笔记】-串联RLC电路分析
    【C++优先级队列priority_queue基础】基本使用,模拟实现,堆
    在线客服系统源码/在线对话聊天/多商户在线客服系统源码(可机器人自动聊天/支持app公众号网页H5)
    ENVI:如何自定义RPC文件?
    Linux磁盘分区机制及虚拟机扩容案例
    流量管制-令牌桶与漏桶
    推荐 5 个 火火火火 的 CSS 项目
  • 原文地址:https://www.cnblogs.com/wzmcnblogs/p/16746274.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号