基本知识:
通常情况下,我们所见的颜色都可以用红色、绿色、蓝色三种颜色按照不同比例混合而成,因此红绿蓝又称为三原色(对应英文R(red)、G(green)、B(blue))。目前RGB色彩、模式是工业界的颜色标准之一(还有CMYK等)。
通常情况下,我们所见的颜色都可以用红色、绿色、蓝色三种颜色按照不同比例混合而成,因此红绿蓝又称为三原色(对应英文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位色;
这样计算下来,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)等已经定义的静态成员。
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,
代码如下:
载入窗体时:
Private Sub Form2_Load(sender As Object,e As EventArgs) Handles MyBase.Load colorPalette = Color.FromArgb(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,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,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 教程 目录