【加试题】RGB颜色模式是用8位二进制数表示红色、8位二进制数表示绿色、8位二进制数表示蓝色即使用24位二进制数表示一种颜色的模式。若将每位二进制数取反,即(0改为1、1改为0)就会变为另一种颜色,我们称这种方式为颜色反相。
小明编写了一个VB程序实现上述功能,在名称为o_c_txt的文本框中输入原始颜色如#000000,点击命令按钮fx_cmd后,在名称为f_c_lab的标签中输出反相后的颜色如#FFFFFF。运行效果如图所示。
实现上述功能的算法如下:
数组dzb_h的16个元素分别存放16进制数的16个基本数码。
依次取出原始颜色代码中每一位对应的16进制数码,例如原始颜色代码为#123456,第1次取出1,第2次取出2……
在数组dzb_h各元素中找到对应16进制数码的元素
运用规律:0+F=1+E…=7+8取得反相色并累加,例如:数组dzb_h第1个元素值的反相色的值是数组dzb_h第16个元素值。
输出得到的反相色。
实现上述功能的VB程序代码段如下,请完善相关程序代码。
Private Sub fx_cmd_Click()
Dim dzb_h(1 To 16) As String
Dim o_c As String, f_c As String, i As Integer, xbxh As Integer, c As String
dzb_h(1) = "0": dzb_h(2) = "1": dzb_h(3) = "2": dzb_h(4) = "3"
dzb_h(5) = "4": dzb_h(6) = "5": dzb_h(7) = "6": dzb_h(8) = "7"
dzb_h(9) = "8": dzb_h(10) = "9": dzb_h(11) = "A": dzb_h(12) = "B"
dzb_h(13) = "C": dzb_h(14) = "D": dzb_h(15) = "E": dzb_h(16) = "F"
o_c = o_c_txt.Text '存储原始色
i = 2
f_c = "#" '存储反相色
Do While i <= Len(o_c)
c = Mid(o_c, i, 1)
If Asc(c) > 96 Then c = Chr(Asc(c) - 32) '小写字母变大写字母
xbxh = 1
Do While xbxh < 17
If {#blank#}1{#/blank#} Then '在数组中找到对应16进制数码的元素
f_c = {#blank#}2{#/blank#} '累加反相色对应的16进制代码
Exit Do
End If
xbxh = xbxh + 1
Loop
i = i + 1
Loop
f_c_lab.Caption = f_c
End Sub