我很无聊,我想创造自己的颜色纠察队员。
首先,我想生成一个色样。我该如何创建色样?
这是一个两部分问题。
如何在给定ARGB值的情况下绘制单个像素点。
这些ARGB值中存在哪些值?我的范围是什么?
循环和绘制这些点是否有效?我的目的是在内存中创建这个图像,然后将其转换为Drawing.Image类,然后将其设置为图片框。
感谢您的建议。
答案 0 :(得分:7)
只要您对与性能相关的问题很聪明,这就相对简单了。当我感到无聊或有创意时,颜色选择器是我最喜欢重新实现的轮子之一。
您可以使用SetPixel
method的Bitmap
class在给定ARGB值的情况下绘制单个像素点。循环一个新的,适当大小的Bitmap
对象的每个像素,并将其设置为适当的颜色,是完成此操作的最简单方法。如果在打开颜色选择器时执行一次,并将位图对象缓存在类级变量中,必要时将其重新绘制到控件上,而不是每次重绘它,性能完全可敬
否则,SetPixel
是绘制可想象的位图的最慢方式。有一些技巧可以加快速度,例如锁定位图和/或放入本机代码,但这些并不会使任何更简单。什么会大大简化您的代码,甚至提供适度的性能提升,而是使用渐变画笔进行绘图。 Graphics
class非常好地封装了GDI +的绘图功能,并创建了LinearGradientBrush
object来绘制图纸
非常简单。
就您的第二个问题而言,您需要使用的值的范围是多少,第一项业务是了解您想要在颜色选择器上显示的颜色模型。可能最常见且易于使用的两个选项是RGB和HSV(也称为HSB; HSL完全不同)。
在RGB颜色空间中,单个颜色由其红色,绿色和蓝色的组件值表示。标准比例表示从0(最小)到255(最大)的值。白色由(255,255,255)表示,而黑色表示为(0,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#是我在网上看到的第一个颜色选择器实现,虽然相对而言相对简单,但在解释技术细节方面做得非常出色。 (我从他的文章中采用了许多解答图。)
答案 1 :(得分:0)
我想说得到你想要的彩色窗格的图像,然后检测鼠标光标在图像上的位置。指针位置是MouseEventArgs中的X和Y属性。从这些坐标中,计算颜色/透明度。
RGB范围是0-255,A是0-100
希望这个帮助