vb:Cg色彩精灵 第一部分:使用到的知识

翻出来以前写的一篇文章:Cg色彩精灵,这是用vb6来写的

搞图像创作都有那么个难题,就是在上色时候老是配不好颜色,不是显得红了就是偏蓝,不得不参考别人的配色或者翻看颜色参考书,为什么不尝试自己做一个保存颜色的程序,把觉得好的颜色存储起来,方便在配色时参看使用。
程序实现目标:1、程序可以配色;2、实现颜色的存储;3、屏幕取色。

第一部分:使用到的知识
一、Vb与颜色有关的部分基本知识
Vb中使用颜色的三种方法,1、使用QbColor(Color)函数,其中参数Color是0-15的整型,因此这个函数只能选择16种颜色;2、使用RGB(red,green,blue)函数,每个参数的值是0-255的整型,构成256×256×256=1677万种颜色,例如使用该语句定义窗体的背景色为白色:Form.BackColor=RGB(255,255,255);3、使用Long型数值,比如设置窗体的背景色为白色:Form.BackColor= 16777215,或者:Form.BackColor=”&HFFFFFF”。
颜色是由红色(R)、绿色(G)、蓝色(B)按照一定比例组成的,每个颜色分量的大小是0-255,例如,白色的构成是:R:255;G:255;B:255。对于颜色可以通过调整RGB分量来获得,也可以将颜色还原为三个分量的值,具体方法如下:
红色分量:= 颜色值 And &HFF
绿色分量:= (颜色值 And CLng("&HFF00")) / 256
蓝色分量:= (颜色值 And &HFF0000) / 65536
在Vb中取色可以使用Object.Point(X,Y)函数,X、Y表示该Object上的坐标点位置,比如在Form上坐标点(1890,3660)的位置取色:Form.Point(1890,3660)。但是这个函数只能在本程序中使用,如果我们要在屏幕上取色的话,就不得不求助于Windows Api 函数中的GetPixel 函数(参看第二部分)。
二、Vb和数据库方面的知识
程序要考虑存储颜色值,实际需要的数据包含:颜色的名称、颜色所属类型、颜色的值。程序中使用的数据并不复杂,因此使用Access的数据库。
启动Access,新建数据库Color.mdb ,建立两个数据表:

表1:ColorNameTable:
Index自动编号长整型颜色自动编号
ColorName文本50颜色名称
ColorType文本10颜色类型
ColorValue文本10颜色数值

表2:ColorTypeTable
ColorType文本10颜色类型

此外,为了防止别人修改数据库,应该对数据库进行加密,选择“工具/安全/设置数据库密码”,然后根据提示输入密码。
Vb提供了多种数据库访问技术,Ado(ActiveX数据访问对象)的功能非常强大,可以访问多种数据源,在程序中建议采用Ado来完成数据操作。首先需要在工程中引用“Microsoft ActiveX Data Objects 2.1 Library” ,然后是进行一些比较固定的操作:

Public Conn As ADODB.Connection'建立ADODB.Connection对象
Public Rs As ADODB.Recordset'建立ADODB.Recordset对象
Public StrSql As String'操作Recordset 的Sql语句
Set Conn = New Connection
Set Rs = New Recordset
Conn.CursorLocation = adUseClient'使用由本地游标库提供的客户端游标
Conn.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ=color.mdb; DefaultDir=" & App.Path & "\;Uid=;Pwd=;"
'打开到数据源的连接,如果有用户和密码的话,需要在Uid和Pwd后面加入
Rs.ActiveConnection = Conn' 设置Rs到Conn对象的连接
Rs.CursorType = adOpenDynamic'设置游标类型为动态游标
'在程序中使用Rs.Open StrSql进行数据操作

以上部分需要大家记住,可以说是Vb操作(*.mdb)数据库的必备过程。

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As Dat...