加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 我将如何生成颜色选择器的彩色色板?

发布时间:2020-12-16 01:41:22 所属栏目:百科 来源:网络整理
导读:我很无聊,我想创造自己的颜色纠察队员. 首先,我想生成一个色样.我该如何创建色样? 这是一个两部分问题. 给定ARGB值,如何绘制单个像素点. 这些ARGB值中存在哪些值?我的范围是多少? 循环和绘制这些点是否有效?我的目的是在内存中创建此图像,然后将其转换为
我很无聊,我想创造自己的颜色纠察队员.

首先,我想生成一个色样.我该如何创建色样?

这是一个两部分问题.

>给定ARGB值,如何绘制单个像素点.
>这些ARGB值中存在哪些值?我的范围是多少?

循环和绘制这些点是否有效?我的目的是在内存中创建此图像,然后将其转换为Drawing.Image类,然后将其设置为图片框.

谢谢你的建议.

解决方法

只要你对与性能相关的问题很聪明,它就相对简单了.当我感到无聊或有创意时,颜色选择器是我最喜欢重新实现的轮子之一.

您可以使用Bitmap class的SetPixel method在给定ARGB值的情况下绘制单个像素点.在新的,适当大小的Bitmap对象的每个像素上循环,并将其设置为适当的颜色,是完成此操作的最简单方法.如果在打开颜色选择器时执行此操作一次,并将位图对象缓存在类级变量中,必要时将其重新绘制到控件上,而不是每次重绘它,性能完全可以接受.

否则,SetPixel是绘制可想象的位图的最慢方式.有一些技巧可以加快速度,例如锁定位图和/或放入本机代码,但这些并不会使事情变得更简单.什么会大大简化您的代码,甚至提供适度的性能提升,而是使用渐变画笔进行绘图. Graphics class非常好地封装了GDI的绘图功能,并创建了一个LinearGradientBrush object来完成绘图
很简单.

至于你的第二个问题,你需要使用的值的范围是什么,第一个业务的顺序是理解你想要在颜色选择器上呈现的颜色模型.可能最常见且易于使用的两个选项是RGB和HSV(也称为HSB; HSL完全不同).

在RGB颜色空间中,单个颜色由其红色,绿色和蓝色的分量值表示.标准比例表示从0(最小)到255(最大)的值.白色由(255,255,255)表示,而黑色表示为(0,0).由于这是显示器的原生色彩空间,因此许多图形程序都使用它.当然,对于人类而言,它并不是非常直观,因为人们很难弄清楚如何在RGB模型中表达橙色,紫色或棕色.

相反,HSV模型更直观,通常是您用来绘制花哨的彩色网格/渐变的模型.这是Photoshop的颜色选择器上使用的模型(默认情况下),这可能是最着名的:

在HSV中,颜色由三个属性值表示:色调,饱和度和值(或亮度).

> Hue大致对应于色环的度数,因此范围从0到360.

饱和度和值属性通常被认为是百分比,范围从0到100(尽管它们实际上可以由任何值范围表示).

>饱和度描述颜色与圆心的距离.圆的边缘上的颜色是完全饱和的(100),而朝向中心的颜色是不饱和的(白色或0).

>价值(或亮度)很直观.全亮颜色的最大值为100,而缺少亮度的颜色的最小值为0(黑色).

由于这个答案已经很久了,我将向您介绍一些已在互联网上提供的颜色选择器的示例实现,而不是在此逐步解释:

> ColorPicker.NET控件是一个非常全面的产品,有一篇令人惊讶的文章
陪伴它.
> A Primer on Building a Color Picker User Control with GDI+ in VB.NET or C#来自MSDN杂志是我在网上看到的第一个颜色选择器实现,虽然相对来说相对简单,但在解释技术细节方面做得非常出色. (我从他的文章中采用了许多解答图.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读