一个初级的使用GDI+开发的颜色拾取器用户控件

C# GDI+数字表控件开发指南 C# GDI+数字表控件开发教程摘要 本教程详细讲解如何用C# GDI+开发功能完善的数字表控件NumericDisplay。该控件支持: 动态数值更新与自动重绘 深度定制(字体/颜色/边框/单位显示) 抗锯齿+双缓冲优化显示效果 数据格式化(小数位/千分位) 性能优化方案 核心实现: 继承Control类重写OnPaint 使用TextRenderingHint.AntiAlias消除锯齿 通过Invalidate()实现高效重绘 提供可绑定属性(Value/Font/Unit等) 开发者可通过简单属性配 阅读详情
 
概要

        虽然大部份开发者和APIs在工作中使用颜色时用RGB方案,但在阐述或选择颜色上它不是唯一可供使用的方法。比如,标准的 Windows颜色-选择对话框允许你在工作时用一种间接的方法使用HSL颜色方案。这篇文章,作者描述若干颜色选择的方案,而且使用GDI+(通过 System.Drawing命名空间)产生一个组件这样做可以为你自己的应用程序提供一个简单的、友好的颜色选择者。按着这个方法,你将得到一些提示来帮助你在自己的应用中使用GDI+。 
        因为Windows? 提供一个标准的通用的来选择颜色的对话框(参见图1),所以很容易就假定这是选择颜色的仅有方法。那是不正确的,然而,在这篇文章中我将提供一个易用的方法来代替标准的颜色-选择对话框。这个例子的外观和布局很容易修改。你可以使用任何你喜欢的方法来设计指示器,而且这个例子包含了两种不同的布局设计。这篇文章中心在两种特定的区域:研究不同颜色选择的方法和解释System.Drawing 命名空间的是如何让使这个例子工作的。

颜色空间:

        标准的Windows颜色-选择对话框只在众多的方法中提供两种方法来表示颜色。可以使用代码来表示颜色。这个颜色选择的表示是通常被叫做“颜色空间”,因为颜色表示通常地允许你通过一个固定的三-维坐标空间去访问颜色。图1显示当自定义的颜色按钮被选择时的标准的Windows对话框,所以右手边面板出现,允许你去定义自己的颜色。忽视左手边侧面的对话框,它允许你简单的通过一个预选择颜色的调色板来选择颜色,右手边的面板允许用鼠标拖曳颜色选择条,或者使用两种不同的颜色空间,红/绿/蓝(RGB)或色彩/饱和/发光度(HSL)输入颜色。在这个对话框中,单个的RGB值包含8-位值和范围是从0直到255.HSL值范围是从0到240.


图1 Windows标准的颜色选择对话框

        RGB 颜色系统组合三种颜色坐标,同一个表明颜色的透明度,通常称作“alpha“的组成部分,产生一个32位无符号的整数值来表示颜色。注意图1这个对话框不提供任何方法选择一个除了 255的alpha值,允许只有完全不透明的颜色。AlphaRGB (ARGB)值是一种很容易用计算机解决的方法来表示颜色的。例如,在图1中选择一个颜色,组合ARGB值是十进制13578293或者十六进制数 FF30CFCB。以4-字节值断开这个数字,使其变为单个字节,你将找到,正是你期待的在图1里面给定的颜色,值是255,48,207,和203分别为alpha,红,绿,和蓝颜色的组成部分。当使用这个特殊对话框时,忽略alpha部分,它的值将总是255(FF),这样将很容易使用编程的方法将整数的表示转换成颜色的单个字节,因此Windows的爱好者和它们的应用程序开发者,使用RGB方案去表示颜色。

        RGB颜色系统组合三种颜色坐标,同一个表明颜色的透明度,通常称作“alpha“的组成部分,产生一个32位无符号的整数值来表示颜色。注意图1这个对话框不提供任何方法选择一个除了 255的alpha值,允许只有完全不透明的颜色。AlphaRGB (ARGB)值是一种很容易用计算机解决的方法来表示颜色的。例如,在图1中选择一个颜色,组合ARGB值是十进制13578293或者十六进制数 FF30CFCB。以4-字节值断开这个数字,使其变为单个字节,你将找到,正是你期待的在图1里面给定的颜色,值是255,48,207,和203分别为alpha,红,绿,和蓝颜色的组成部分。当使用这个特殊对话框时,忽略alpha部分,它的值将总是255(FF),这样将很容易使用编程的方法将整数的表示转换成颜色的单个字节,因此Windows的爱好者和它们的应用程序开发者,使用RGB方案去表示颜色。

        虽然使用RGB颜色空间对于计算机在它的内部之间变换颜色的表示后退和向前而且表示人类需要为了选择一个颜色是比较容易的,在颜色挑选上RGB不提供任何有用的次序。一些开发组任意的选择安排在图1右手边颜色栅格布局--没有理由它看上去是这种样子。如果你花点时间去调查在颜色选择方块之内这些相连的颜色的意思,当在屏幕上移动你的鼠标时,观察R,G和B部分值的颜色,你将可能辨别一个模式。这个模式不是明显的,然而,可能你曾经也没猜想一个RGB值给出了你选择的位置。在一个比较合逻辑的颜色选择方案,颜色选择器的位置应该与选择器有一些联系。

        回到很容易使用的Windows通用的对话框以前的那些日子,我记得尝试去创造我自己的颜色选择对话框。没有更进一步的了解,于是我开始尝试创造一个二维栅格来提供选择任何RGB颜色。很快的,我认识到我正在用二维工具尝试去解决一个三维问题。我的那个简单的解决方案是提供一组可供选择的颜色,除了这个简单的方法外。事实上,RGB颜色空间由标准Cartesian座标组成,用红,绿,蓝分配颜色象的像x,y和z值那样工作。使用RGB颜色空间规定一个颜色要在三维空间选择一个点,这一点的任何组成部分表明与三个轴的黑色(0,0,0)的间距。白色(255, 255,255)表示的角是颜色“立方”斜相反的开端。

        所以RGB是方便的,但不是为了人类。人类是习惯用颜色在术语里的色调,饱各度和亮度来思考颜色。为了符合这些需要,标准的颜色选择对话框也提供一个可选择的表示这个颜色的值,HSL样式。这个可供选择的安排对于你和我是比较有意义的,虽然它要求计算机做更多的工作作为它完成有些复杂数学上的计算把HSL格式值变换成更通用的RGB值。如果你在对话框里选择拖曳选择左、右或向上和向下和观察HSL值,你将正好看到样式。那是,当你从左到右移动穿过方块,色彩值从0增加到240.当你在方块里从顶部移动到底部,饱和值从240减少到 0。当你从顶部拖曳独立的竖直的滑块到底部,亮度值从240减少到0。给这些实际的安排,你能相对的容易,成为精通从在对话框中的二个点的位置转化成一个合理的近似相应的HSL颜色值。这种情况不适用RGB。

        色调/饱和/值(HSV)颜色空间是一种HSL的修饰,值的轴线是用来测量颜色的明亮度,你的范围不能超出饱和的明亮度之外。与之比较,HSL允许你在超过饱和的明亮度之外移动,穿越蜡笔颜色,一直到白色。HSV使用一个饱和度为0的值,提供所有的颜色,这些颜色有相同的红,绿,蓝组成成份。(那是灰色的色度)。HSV是显示实例应用中的颜色方案,而且它很容易解释。

        第一个HSV值的组成部分,色调,相当于在一个圆中的角度。这个圆包含相同的颜色像在图1右手边显示的那样,但是安排在圆型的样式(请看图2)。给定这个布局,红颜色相当于0度,黄色相当于60度,等等。在实例项目中,HSV的特殊变化用来在圆中变化角度,所以颜色色调的值分配范围是从0到255— 变换是在代码内部完成的。


图2颜色圆

        饱和值相当于离圆心的距离。颜色在圆的边界是完全饱和圆心包含没有饱和的白色。图3显示的是绿色饱和值的变化范围,好象在图2显示的圆中抽取出来的。再一次,我选择从0到255范围是任意的和只有适合做选择颜色而使用HSV时感觉比较像熟悉的RGB。在真实性上,实例能刚好使用在0和1之间浮点值来表示饱和值。


图3饱和状态

        值的分配包括选择的颜色明亮度,它范围是从255(完全明亮)到0(黑暗)。再一次,重要的不是精确的值—此刻的变化是刚好实用。图4显示的绿色,它的坐标值从255变化到0。


图4 值

        当你工作中使用HSV颜色空间时,你真正拥有的是一个彩色的圆锥。在图2中的圆扮演圆锥的顶部,一条线从圆上每一个点往下到圆锥的顶点,表示黑色,为每一个颜色提供亮度范围。图5显示这个圆锥为三种颜色使用明亮轴线:绿色,蓝晶色,紫色。一个色调坐标能表示任何颜色,测量环绕圆的角度,饱和度的坐标是离圆心距离,值的坐标是于圆锥底部的顶点的距离。

WPF中GDI+图形图像的绘制:(一)绘制文本——动态设置字体、大小、颜色 GDI+(Graphics Device Interface Plus图形设备接口加)是.NET框架的重要组成部分,负责在屏幕和打印机上绘制图形图像和显示信息。GDI+不但在功能上比GDI 要强大很多,而且在代码编写方面也更简单,因此很快成为了Windows图形图像程序开发的首选。 从程序设计的角度看,GDI包括两部分:GDI对象和GDI函数。GDI对象定义了GDI函数使用的工具和环境变量;而G... 阅读详情

相关推荐

C# GDI+数字表自定义控件开发全攻略:从零到工业级仪表盘

摘要: 本文介绍如何利用C# GDI+技术开发一个工业级数字表控件,支持动态数值更新、抗锯齿显示和样式自定义。控件继承Control类,通过重写OnPaint方法实现双缓冲渲染,避免界面闪烁。核心功能包括实时数值刷新(Value属性)、字体/颜色配置(Font/TextColor)、边框控制(ShowBorder)和小数位数格式化(DecimalPlaces)。代码示例展示了属性定义与绘制逻辑,适用于仪表盘、设备监控等需要高性能数字显示的场景。

java专栏 1936

Windows位图(Bitmap)和调色板(Palette)

【Image Processing】Windows位图(Bitmap)和调色板(Palette)- -                                      1.位图和调色板的概念如今Windows(3.x以及95,NT)系列已经成为决大多数用户使用的操作系统。它比DOS成功的一个重要因素是它可视化的漂亮界面,例如你可以在桌面上铺上你喜欢的墙纸。那么Windows是如何

aikker的专栏 3140

基于GDI+技术开发工业仪表盘控件

写在前面: 上次给大家看了一个上位机界面之后,很多人表示对那个仪表盘的开发感兴趣,今天就跟大家分享一下整个的开发过程,由于整个仪表盘开发的过程还是有些复杂的,无法将所有的代码都一一展示,所以重点跟大家分享一下开发的思路,毕竟每个人都会有自己的想法和风格。 01.效果图展示 先给大家看看实际项目中的应用效果图: 图表 1 项目效果图...

xiketangAndy的博客 880

C++/GDI+ 学习笔记(四)——实用技巧——调色板(ColorPalette)

在使用的过程中,遇到了这样的一个情况。维护很久前的一个项目的时候,想把之前的程序作成DLL。里面有一部分是描画一张8位DIB图片的,用的是纯C写的一段代码。可是在使用的时候发现,GDI+中由于使用了Alpha,所以老代码里面的调色板需要进行一些处理。 ColorPalette类,这个是GDI+中的调色板类。在对调色板进行调整的时候,我们是一定要使用它的。在C#中,ColorPalette 是没有

Mirage520的专栏 2558

C# GDI+画板以及画笔颜色改变

1.页面的功能就是通过画笔可以在pictureBox控件里面进行涂鸦,然后通过comboBox控件绑定画笔颜色,选中comboBox里面的列就可以触发事件,修改画笔的颜色,点击保存可以把涂鸦的画保存在本地,照片的后缀名可以自己修改 (分享不易,可不可以来个三连,点个赞也行呀) public partial class Form4 : Form { public Form4() { InitializeComponent();

qq_43144405的博客 1731

实现MFC颜色面板:Win7画图板颜色选择器的MFC等效实现

本文还有配套的精品资源,点击获取 简介:本文探讨了如何在MFC应用程序中实现一个类似Windows 7画图板的颜色面板,提供用户丰富的色彩选择。涵盖了MFC框架基础、创建颜色面板的过程、CColorDialog类的使用、颜色显示更新、自定义颜色选择以及性能优化和无障碍性考虑等方面。 1. MFC框架基础和消息映射 1.1 MFC框架简介 MFC(Mic...

weixin_42502040的博客 1296

实时取色器(RGB)

能够实时显示鼠标所在位置的RBG(带弹窗),便于实时取色,创作不易,喜欢的话麻烦点赞收藏哟~

晋升阁的博客 2万+

一个很不错的圆形的颜色选择器

一个圆形的颜色选择器,可以根据自己的需求更改

GDI+ 一个初级的使用GDI+开发的颜色拾取器用户控件

<!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--><script type="text/javascript"

zgqtxwd的专栏 509

取色器工具,获取屏幕某点色号

取色器工具,获取屏幕某点色号,页面设计时随时获取或者采集漂亮页面的颜色工具。

基于GDI+的 图元绘制拾取 C#实现

基于GDI+的图元绘制拾取 C#实现 程序效果如博客http://blog.youkuaiyun.com/small_fish__/article/details/7394304所见

STTextBox - 一个纯GDI开发的开源WinForm控件

STTextBox是一个开源的WinFrom控件,纯GDI绘制,支持Emoji表情符号、所有颜色支持Alpha、并且支持自定义文本样式等。

crystal_lz的专栏 2061

一个不错的取色器代码(获取颜色数值的代码)

在网页及图片设计中,每一种颜色就代表一个数值,比如#5r9r6h,我们在进行配色的过程中,经常需要获取颜色的值,必须用方便地获取颜色的代码。因此取色器这种工具就显得很有必要了。 还记得以前我想取色的时候,还要打开PHOTOSHOP获取颜色代码,刚好电脑配置不高,对比,取色,很麻烦的花好几个步骤才能完成,现在用网页取色器就能方便地对比取色了。 打开http://www.zhukun.net/tool/color查看效果

C 使用GDI绘制漂亮的ToolTip控件:让界面更具个性化

C# 使用GDI绘制漂亮的ToolTip控件:让界面更具个性化 去发现同类优质开源项目:https://gitcode.com/ C# 使用GDI+绘制漂亮的ToolTip控件:为应用程序界面添加个性化元素。 项目介绍 在软件开发中,ToolTip 控件常用于为用户提供额外的信息提示,它能够增强应用程序的用户体验。然而,默认的 ToolTip 控件外观往往比较单一,缺乏个性化。本项目旨在解决这一问...

gitblog_06787的博客 1006

取色器、设计取色器

改工具为 color.exe 方便获取任何位置的颜色值,格式数字形式和16进制形式,改资源为121k 大小。使用方便灵巧。

Dify插件实战:实时渲染AI生成的HTML/SVG/Canvas代码

在现代Web开发与AI应用集成中,前端渲染技术是实现动态内容展示的核心。其原理在于浏览器引擎解析HTML、CSS、JavaScript等代码,并将其转换为可视化的用户界面。这项技术的价值在于极大提升了开发效率与用户体验,允许开发者快速构建和迭代交互式应用。在AI应用开发领域,尤其是大语言模型(LLM)集成场景,如何将模型生成的**结构化代码**(如描述UI的HTML或数据图表的SVG)实时转化为可视化组件,成为一个关键需求。这直接关系到**Dify**等低代码AI平台能否提供流畅的、所见即所得的交互体验。本

weixin_42545664的博客 498

【第31节】MFC编程:GDI与控件绘制

此外,函数还得返回一个画刷句柄,这个画刷会在控件绘制之前,用来填充控件的客户区。随着复杂控件出现,引入了WM_NOTIFY消息,新的自绘方法也跟着出现了,这里面要处理NM_CUSTOMDRAW消息。每次绘制或擦除正在绘制的图像时,重新按顺序绘制之前的图形。这个NM_CUSTOMDRAW消息会发给父窗口,不过MFC有消息反射机制,能让消息在控件类里处理,这种绘制方式也叫“自定义绘制”。对CMyListCtrl类进行封装,能实现设置每行颜色的功能,但暂时不封装设置每列的功能,不过代码里会提到获取列的方法。

攻城狮7号的博客 1351

Ubuntu登录界面黑屏?手把手教你排查和修复LightDM启动失败(附debug命令详解)

本文详细介绍了Ubuntu系统中LightDM(Light Display Manager)启动失败导致登录界面黑屏的排查与修复方法。通过系统状态检查、调试模式分析、常见故障解决方案及高级调试技巧,帮助用户快速定位并解决LightDM相关问题,恢复正常的图形登录环境。

weixin_34005090的博客 314

pb中控件变颜色_基于GDI+技术开发工业仪表盘控件

写在前面:上次给大家看了一个上位机界面之后,很多人表示对那个仪表盘的开发感兴趣,今天就跟大家分享一下整个的开发过程,由于整个仪表盘开发的过程还是有些复杂的,无法将所有的代码都一一展示,所以重点跟大家分享一下开发的思路,毕竟每个人都会有自己的想法和风格。01效果图展示先给大家看看实际项目中的应用效果图:图表 1 项目效果图对于这种仪表盘控件的开发,只能通过GDI+来实现。实际使用中,我们可...

weixin_39762838的博客 245

【FPGA XDMA AXI Bridge 模式】PCIe:BARs 和 AXI:BARs 含义解析

Xilinx的 DMA/Bridge Subsystem for PCI Express IP核中,支持普通的XDMA模式,但是这种模式只允许主机端发起PCIe 读写请求,FPGA内部无法主动发起读写请求,也即FPGA无法主动读写HOST的内存。而该IP核的另一种模式,AXI Bridge模式则支持HOST主动读写,以及FPGA主动读写。该模式下有个参数需要配置,分别是PCIe:BARs以及AXI:BARs。而上述的普通模式只有PCIe:BARs需要配置。下面详细说说这两个参数的含义。

weixin_45888152的博客 3730

2025年GESP12月认证C++四级真题解析

摘要 本文包含11道C++编程题目,涵盖指针、数组、函数参数传递、结构体和排序算法等知识点。每题2分,总分30分,主要考察学生对C++基础语法的掌握程度。题目包括指针定义与解引用(第1-4题)、二维/三维数组遍历(第4-5题)、变量作用域(第6题)、函数传参方式(第7题)、结构体操作(第8题)、递归算法(第9题)和排序稳定性判断(第10题)。最后第11题要求补全选择排序算法代码片段。每道题均提供标准答案和详细解析,适合用于检验C++基础知识的掌握情况。

lan_in的博客 316

【转】C#使用GDI+制作背景颜色淡入淡出效果的按钮

C#使用GDI+制作背景颜色淡入淡出效果的按钮 2010-04-14 来自:CNBLOG 字体大小:【大中小】 摘要:本文介绍C#使用GDI+制作背景颜色淡入淡出效果的按钮,并提供完整的示例和源码供下载。 用过QQ2009的网友都知道QQ主面板的界面非常炫丽,特别好看,鼠标移上去还有淡入淡出的效果。那这样效果是怎么做出来的呢?其实不难,只要自定义一个用户控件的外...

weixin_34378767的博客 429

uniapp - 实现 App 端 “半屏幕“ 连续扫码功能,页面只有半个屏幕是扫码框并且可持续连续扫码获取数据(不使用官方 uni.scanCode API,因为无法连续扫码!)详细示例源码插件教程

uniapp app端实现半屏幕扫码,uniapp 扫一扫半个屏幕,uniapp 扫一扫,uniapp持续扫码实现,uniapp怎么自定义扫码和连续扫码,uni-app App端半屏连续扫码,uniapp 扫一扫半个屏幕,uniapp自定义扫码页面样式,实现连续扫码功能(uniapp),uniapp - 实现 App 端 "半屏幕" 连续扫码功能,页面只有半个屏幕是扫码框并且可持续连续扫码获取数据(不使用官方 uni.scanCode API,因为无法连续扫码!)详细示例源码插件教程。

✅ 精选推荐文章 1万+
上一篇: Visual Basic.NET和GDI+共创图标编辑器
下一篇: Visual Basic 2005 中的智能客户端数据
xmlscript
博客等级 码龄25年 1粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值