关于颜色的问题

northwolves 2003-11-01 12:06:21
哪位朋友知道颜色的加减与RGB()的关系?讨论一下:
Text1.BackColor = Abs(vbGreen - vbYellow)
Text2.BackColor = Abs(vbWhite - vbYellow)
Text3.BackColor = Abs(vbRed - vbYellow)
...全文
126 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
northwolves 2003-11-02
  • 打赏
  • 举报
回复
看来非得这样了。曾想根据一个LONG类型的颜色值判断大概属于红色或兰色或其它,不想加入主观因素,真没有好的办法?
qiqunet 2003-11-02
  • 打赏
  • 举报
回复
//Text1.BackColor = RGB(200, 100, 50) 如何判断是褐色的?

褐色、绿色、红色等是一种比较模糊的概念,比较难界定,它们也是指一定的颜色范围。
要作出这样的判断,恐怕要采用查表法,如:事前建立一张表格,并定义好哪几样颜色(或颜色范围)是褐色,当给出RGB的值时就去查这张表格来确定它是不是褐色
ClassicWuHao 2003-11-01
  • 打赏
  • 举报
回复
RGB的值不能为<0 and >255的,你自己可以试一下.RGB的返回值是一个Long类型的数值.
jxfzcgh 2003-11-01
  • 打赏
  • 举报
回复
256色怎么跟真彩色或者rgb颜色转化呢?
northwolves 2003-11-01
  • 打赏
  • 举报
回复
backcolor都是LONG类型的,可以直接加减。只从一个已知值的颜色的LONG值,可以计算出RED,GREEN,BLUE的值, 但他到底看上去是什么颜色?eg:
Text1.BackColor = RGB(200, 100, 50) 如何判断是褐色的?
pandengzhe 2003-11-01
  • 打赏
  • 举报
回复
不错
pigpag 2003-11-01
  • 打赏
  • 举报
回复
//由于只需要比较距离,所以可以不要Sqr
不需要Abs吧
jxfzcgh 2003-11-01
  • 打赏
  • 举报
回复
谢谢!!!!!!!!!!!
zyl910 2003-11-01
  • 打赏
  • 举报
回复
abs(R-cR)^2的意义在于:

三维空间 两点距离公式:d=Sqr((X1-X0)^2 + (Y1-Y0)^2 + (Z1-Z0)^2)
RGB空间 是三维空间
由于只需要比较距离,所以可以不要Sqr
pigpag 2003-11-01
  • 打赏
  • 举报
回复
abs(R-cR)^2是不是……嗬嗬
sakabi 2003-11-01
  • 打赏
  • 举报
回复
这个和光的三原色有关.
黄色由红色和绿色组成.
Text1.BackColor = Abs(vbGreen - vbYellow)本句是由黄色中去除绿色结果为红色.
白色由红 绿 蓝 三色组成.
Text2.BackColor = Abs(vbWhite - vbYellow)本句由白色中去除黄色(红色和绿色),结果为蓝色.
同理:
Text3.BackColor = Abs(vbRed - vbYellow)由黄色中去除红色结果为绿色.

zyl910 2003-11-01
  • 打赏
  • 举报
回复
ColorTable(0 to 255):调色板
C:待匹配的颜色


dim I as long
dim R as byte,G as byte,B as byte
dim cR as byte,cG as byte,cB as byte
dim Idx as long,D as long
dim tD as long

cR=C and &HFF
cG=(C and &HFF00&)\&H100&
cB=(C and &HFF0000)\&H10000
D=&HFFFFFF '足够大的数字

for i=0 to 255
R=ColorTable(i) and &HFF
G=(ColorTable(i) and &HFF00&)\&H100&
B=(ColorTable(i) and &HFF0000)\&H10000
tD=abs(R-cR)^2+abs(G-cG)^2+abs(B-cB)^2
if tD<D then
Idx=I
D=tD
If D=0 then exit for
End If
next i

Idx就是索引

jxfzcgh 2003-11-01
  • 打赏
  • 举报
回复
呵呵,谢谢zyl910兄的热情回答!
那怎么把分离出来的rgb颜色对应到某个特定的严肃索引呢!!
zyl910 2003-11-01
  • 打赏
  • 举报
回复
调色板就是一个有256个元素的数组
每一个元素是一个Long——RGB值
jxfzcgh 2003-11-01
  • 打赏
  • 举报
回复
不明白,怎么比较啊,我知道怎么怎么分离出R G B颜色值,但是怎么转成 256 颜色索引啊
我对颜色索引不是很了解
zyl910 2003-11-01
  • 打赏
  • 举报
回复
分离RGB的方法:


C:颜色

R=C and &HFF
G=(C and &HFF00&)\&H100&
B=(C and &HFF0000)\&H10000
zyl910 2003-11-01
  • 打赏
  • 举报
回复
For循环比较不就的了
jxfzcgh 2003-11-01
  • 打赏
  • 举报
回复
假如我有一个真彩色值 H00FFFFFF 或者 RGB(128,0,128)
怎么转换成最接近的256的颜色索引
zyl910 2003-11-01
  • 打赏
  • 举报
回复
你要怎样的转换?
qiqunet 2003-11-01
  • 打赏
  • 举报
回复
TO ClassicWuHao(Mouse)
不好意思,在这里点出你的问题:你的概念有点混淆了,RGB的确不能小于0,但可能会大于255,但不可能大于16777215(即&HFFFFFF),不大于255的是R或G或B在未组合成RGB颜色前的取值

不信请测试:

Private Sub Form_Load()
If RGB(255, 255, 255) > &HFF Then MsgBox ("RGB的值大于255")
End Sub
加载更多回复(6)

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧