一个获取渐变色颜色信息的实用工具程序
马致明
新疆师范大学物理系 830054
一、程序功能
在制作文字或图形界面时,常常希望获取介于两种颜色之间的渐变色的有关颜色信息。然而,因为没有现成的工具,许多编程者、图形设计者不得不亲自动手测试,操作起来非常麻烦。笔者经过反复琢磨和实践,用VB制作了一个获取渐变色颜色信息的实用工具程序。运行此程序,只要从颜色对话框中任选两种基色,就可看到由渐变色绘出的光谱带;此后只要将鼠标移向光谱带上的任意一点,屏幕上立即给出该点颜色的三元色分量值。本程序简单又实用,现将其介绍给广大编程爱好者。
二、编程思路
1. 从基色中获取三元色分量值
实现颜色渐变,要借助RGB(red,green,blue)函数。为此,必须从基色中分离出红、绿、蓝三元色分量值。调色板及系统颜色用的是长整数表示法,其中低字节描述的是红色,次字节描述的是绿色,第三个字节描述的是蓝色,高字节未用;若颜色值为colour,则各色分量值依次为:
red=colour Mod 256
green=colour \ 256 Mod 256
blue=colour \ 256^2
2. 渐变色三元色分量值的计算方法
假定基色A和基色B的三元色分量值依次为Ar、Ag、Ab和Br、Bg、Bb,若想从A色经过k种颜色渐变到B色,则第i种渐变色的三元色分量值可采用以下计算方法:
red=Ar+(Br-Ar) * i / k
green=Ag+(Bg-Ag) * i / k
blue=Ab+(Bb-Ab) * i / k
其中,i的取值范围为:0,1,2,3,……,k。
3. 获取渐变色的颜色信息
当两种基色确定以后,按以上方法将渐变色的三元色信息保存在数组中,并用画矩形条的方法在图片框中画出渐变效果图。此后,只要把鼠标移到渐变效果图上,根据鼠标所在的矩形条的位置,就可从数组中得到该点的颜色信息。
三、程序介绍
1. 程序控件
本程序在窗体Form1上安置的控件有:图片框Picture1,用来呈现渐变效果图;通用对话框CommonDialog1,用来呈现颜色对话框;命令钮数组Command1(0)和Command1(1),标题依次取为“第一种颜色”和“第一种颜色”,用来选定两种基色;标签Label1,用来呈现颜色信息。为了美化界面并方便使用者,各控件的位置及相关属性均在程序代码中的Form_Load事件中设置。
2. 程序代码
Dim R(256) As Byte, G(256) As Byte, B(256) As Byte
Dim Cr(1) As Single, Cg(1) As Single, Cb(1) As Single
Private Sub Form_Load() '设定控件位置及相关属性
Form1.Top = 0 '窗体
Form1.Left = 0
Form1.Height = Screen.Height
Form1.Width = Screen.Width
Picture1.Top = 500 '图片框
Picture1.Left = Screen.Width * 0.3
Picture1.Width = 5200
Picture1.Height = 2500
Picture1.AutoRedraw = True
Picture1.BackColor = vbBlack
Command1(0).Left = Picture1.Left '命令钮数组
Command1(1).Left = Picture1.Left + Picture1.Width - Command1(1).Width
Command1(0).Top = Picture1.Height + Picture1.Top
Command1(1).Top = Picture1.Height + Picture1.Top
Label1.Top = 0 '标签
Label1.Left = Picture1.Left
Label1.ForeColor = vbRed
Label1.FontSize = 20
Label1.AutoSize = True
End Sub
Private Sub Command1_Click(Index As Integer)
Dim Colour As Long, i As Integer
CommonDialog1.ShowColor '呈现颜色对话框
Colour = CommonDialog1.Color '获取颜色
Cr(Index) = Colour Mod 256 '获取红色分量值
Cg(Index) = Colour \ 256 Mod 256 '获取绿色分量值
Cb(Index) = Colour \ 256 ^ 2 '获取蓝色分量值
For i = 0 To 256 '获取渐变色三元色分量值并绘矩形条
R(i) = Cr(0) + (Cr(1) - Cr(0)) * i / 256
G(i) = Cg(0) + (Cg(1) - Cg(0)) * i / 256
B(i) = Cb(0) + (Cb(1) - Cb(0)) * i / 256
Picture1.Line (i * 20, 0)-((i + 1) * 20, 2500), RGB(R(i), G(i), B(i)), BF
Next i
End Sub
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim N As Integer
N = X \ 20
Label1.Caption = "红色=" + CStr(R(N)) + " 绿色=" + CStr(G(N)) + " 蓝色=" + CStr(B(N))
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Label1.Caption = ""
End Sub
附作者简介:
马致明、男、回族、63年10月生、硕士,新疆师范大学物理系微机教研室副教授,主要从事计算机及计算机辅助教学方面的教学和研究。参加过2项CAI方面的课题,并在《电脑爱好者》、《中国电脑教育报》、《多媒体世界》、《电脑知识与技术》、《实验教学与仪器》、《新疆师范大学学报》等九种刊物上发表了十七篇文章;文章主要涉及计算机编程方面的经验和技巧。联系方法:
通讯地址:新疆师范大学物理系 830054
电 话:0991-*******-2582
本文来源:https://www.2haoxitong.net/k/doc/1cb0571452d380eb62946de5.html
文档为doc格式