版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。
基本知识:
通常情况下,我们所见的颜色都可以用红色、绿色、蓝色三种颜色按照不同比例混合而成,因此红绿蓝又称为三原色(对应英文R(red)、G(green)、B(blue))。目前RGB色彩、模式是工业界的颜色标准之一(还有CMYK等)。
每种颜色都有0-255级亮度,其中 0 表示没有亮度,255 表示最大亮度。
这样计算下来,RGB色彩总共能组合出约1678万种颜色,即256×256×256=16777216=2^24,也就是所说的24位色;
计算机中又增加了透明度(Alpha)的概念,0 表示完全透明,255 表示完全不透明。
这样计算下来,ARGB色彩总共能组合出约万种颜色,即256×256×256×256=4294967296=2^32,也就是所说的32位色;
vb.net中,获得一种颜色可以使用以下方法:
Dim myColor as Color=Color.FromArgb(Int32, Int32, Int32)
这是常见的从指定的 8 位颜色值(红色、绿色和蓝色)创建 Color 结构,此方法中Alpha值默认为 255(完全不透明)。
也可以直接使用如Color.Red(ARGB=FFFF0000)等已经定义的静态成员。
获得颜色的其他几种方法请参看MSDN
代码示例:制作一个调色盘
使用到了4个picturebox控件(以pic开头命名),3个hscrollbar控件(以hsb开头命名),3个label控件(以lbl开头命名),如下图:
为了形象说明RGB颜色,红色、绿色、蓝色,每种颜色对应一个滚动条,滚动条的最小值为0,最大值为255,
窗体载入的时候,会在三个小图片框内显示红绿蓝三种颜色,当我们拖动任一滚动条时,picPalette的背景色跟随改变。
代码如下:
载入窗体时:
Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
colorPalette = Color.FromArgb(0, 0, 0)
picRed.BackColor = Color.Red
picGreen.BackColor = Color.Green
picBlue.BackColor = Color.Blue
picPalette.BackColor = colorPalette
End Sub
红色值变动时:
Private Sub hsbRed_Scroll(sender As Object, e As ScrollEventArgs) Handles hsbRed.Scroll
lblRed.Text = hsbRed.Value
colorPalette = Color.FromArgb(hsbRed.Value, hsbGreen.Value, hsbBlue.Value)
picPalette.BackColor = colorPalette
End Sub
绿色值变动时:
Private Sub hsbGreen_Scroll(sender As Object, e As ScrollEventArgs) Handles hsbGreen.Scroll
lblGreen.Text = hsbGreen.Value
colorPalette = Color.FromArgb(hsbRed.Value, hsbGreen.Value, hsbBlue.Value)
picPalette.BackColor = colorPalette
End Sub
蓝色值变动时:
Private Sub hsbBlue_Scroll(sender As Object, e As ScrollEventArgs) Handles hsbBlue.Scroll
lblBlue.Text = hsbBlue.Value
colorPalette = Color.FromArgb(hsbRed.Value, hsbGreen.Value, hsbBlue.Value)
picPalette.BackColor = colorPalette
End Sub
运行时截图:
红色+绿色=黄色
红色+蓝色=紫红色
其他更多的颜色还是留给读者自己测试吧。
更进一步的改进:网页制作中,我们也需要掌握颜色的运用,html中颜色的表示类似”#FF0000“(红色),那么我们通过这个程序获得的颜色如何转为网页中使用的颜色格式呢?
代码如下:
Private Sub toWebColor()
Dim hexRed As String = Format(hsbRed.Value, "X")
If hexRed.Length = 1 Then hexRed = "0" & hexRed
Dim hexGreen As String = Format(hsbGreen.Value, "X")
If hexGreen.Length = 1 Then hexGreen = "0" & hexGreen
Dim hexBlue As String = Format(hsbBlue.Value, "X")
If hexBlue.Length = 1 Then hexBlue = "0" & hexBlue
txtHex.Text = "#" & hexRed & hexGreen & hexBlue
End Sub
这就是将我们的颜色从十进制转为十六进制,按照RGB的顺序排列并在前面加上个”#“,
其中十进制转16进制使用了 Format,”X“表示将数字显示为包含十六进制(以 16 为底)格式的数值的字符串。
我们看一下运行效果:
这下可以将颜色复制到网页的代码里面使用了。
由于.net平台下C#和vb.NET很相似,本文也可以为C#爱好者提供的参考。
学习更多vb.net知识,请参看vb.net教程 目录
————————————————
版权声明:本文为CSDN博主「VB.Net」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。