注册 登录
编程论坛 VB6论坛

VB内置的RGB()函数为什么会返回错误的值?

yuma 发布于 2022-07-22 18:17, 2616 次点击
RGB(255,15,36)

这行代码得到的颜色值为什么是:2363391
VB内置的RGB()函数为什么会返回错误的值?

正确的是

颜色值应该是:16715556
十六进制颜色值是:#FF0F24
15 回复
#2
apull2022-07-23 12:54
2363391的16进制240FFF。
#3
yuma2022-07-23 14:20
回复 2楼 apull
是的,但那不是RGB(255,15,36)正确的值。

别说网页是不正确的,网页上显示的是正确的。
只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2022-7-23 14:21编辑过]

#4
吹水佬2022-07-23 14:30
是十六进制颜色码#FF0F24,不是十六进制颜色值
#5
apull2022-07-23 14:50
这个值在vb中合适呢,还有了解一下数据存储的高低位。
只有本站会员才能查看附件,请 登录
#6
yuma2022-07-23 15:26
这就很神奇了。。。。为什么会这样?
#7
吹水佬2022-07-23 16:46
了解“大小端模式”应该不难理解
#8
风吹过b2022-07-23 23:14
存储字节顺序位的问题
        Pbb(m) = Blue                   '置三原色分量
        Pbb(m + 1) = Green
        Pbb(m + 2) = Red
BMP文件的三原色分量,是 blue \Green \red 的顺序,所以VB里颜色的字节顺序是  bgr 。
一个颜色值占三个字节,没有对应的数据类型,只好扩大一点,能容下的整形数据只有 LONG ,那就用LONG来表示,只是表示而以。

页网页的顺序是: rgb ,自然不同。

#9
风吹过b2022-07-23 23:18
这三句代码,来自这里,
https://bbs.bccn.net/thread-481230-1-1.html

这个代码里,我在内存里解析BMP格式的,并直接填充颜色代码来画图。
VB6,显示的图像,除下加载的图片外(按原始格式),其他图片、图像、绘图,在内存里一律是 BMP 格式。

#10
yuma2022-07-24 08:38
以下是引用风吹过b在2022-7-23 23:14:47的发言:

存储字节顺序位的问题
        Pbb(m) = Blue                   '置三原色分量
        Pbb(m + 1) = Green
        Pbb(m + 2) = Red
BMP文件的三原色分量,是 blue \Green \red 的顺序,所以VB里颜色的字节顺序是  bgr 。
一个颜色值占三个字节,没有对应的数据类型,只好扩大一点,能容下的整形数据只有 LONG ,那就用LONG来表示,只是表示而以。

页网页的顺序是: rgb ,自然不同。



请教,代码中的pbb是什么函数?
#11
风吹过b2022-07-24 09:50
具体看我 9楼 发的那个链接的源代码。
pbb : PropertyBag对像转储的数组,这里是图像转储内存数据  Property_BagBMP
作用是直接写内存绘图,所以能反应颜色代码在内存的存储顺序。
#12
yuma2022-07-24 11:35
这个解释应该是正解。有没有认同这个观点?

https://blog.

只有本站会员才能查看附件,请 登录
#13
风吹过b2022-07-24 13:03
不对。帖子主题是讨论 颜色 表是高端在前,还是低端在前。
但你贴了这个图是 ,CPU存储数据时使用高端前,还是低端在前。
所以不对。

颜色代码里是高端在前还是低端在前,与编译器有关,与OS有关。
如VB6,绘图使用BMP格式来保存数据,那么颜色表是低端,还是高端,那就是看BMP格式的定义。与CPU无关。

Power CPU(IBM)是高端在前 。
#14
chenyucheng2022-07-25 20:30
原来是#FF0F24转成了2363391(#240FFF),
(十进制)2363391=(十六进制)240FFF。
你要得出的是16715556,十六进制FF0F24。
但VB的颜色是蓝绿红(反着的红绿蓝)格式,你是红绿蓝格式。
输入红绿蓝,输出蓝绿红。
FF0F24(RGB)是这个颜色
认成BGR的是这个颜色
VB输入&H00FF0F24&是这个颜色
240FFF(BGR)是这个颜色
认成RGB的是这个颜色
VB输入&H00240FFF&是这个颜色
#15
yuma2022-07-26 09:23
回复 14楼 chenyucheng
你的回复不准确,看MSDN对RGB()函数的定义:红绿蓝  没错。

只有本站会员才能查看附件,请 登录
#16
chenyucheng2022-07-28 13:26
回复 15楼 yuma
我说的没错啊?VB的颜色是反着的红绿蓝(即蓝绿红),RGB函数返回的是VB的颜色值,输入红绿蓝,输出蓝绿红。
还有,你可以试试以下代码(至少有一个按钮和图片框):
程序代码:
Private Sub Command1_Click()
    Picture1.BackColor = RGB(255, 15, 36) '#FF0F24
    Picture1.Print RGB(255, 15, 36), Picture1.BackColor
End Sub


[此贴子已经被作者于2022-7-28 13:35编辑过]

1