注册 登录
编程论坛 VB6论坛

为什么颜色值还可以有负值,什么情况?

yuma 发布于 2023-04-25 19:59, 343 次点击
只有本站会员才能查看附件,请 登录
8 回复
#2
吹水佬2023-04-26 07:57
Point返回的是24位数,有符号显示-1(0xFFFFFF)应该是白色(RGB:255,255,255)
#3
yuma2023-04-30 17:56
AI说,-1表示为透明色。

在计算机编程中,颜色值通常表示为一个整数。对于32位颜色,这个整数可以表示为一个包含四个8位组件(RGBA)的值:红色(R),绿色(G),蓝色(B),和透明度(A)。每个组件的取值范围是0到255。然后,这四个组件的值被组合成一个32位整数。

颜色值可以等于-1,是因为在某些情况下,-1具有特殊的含义。例如,在某些编程语言和库中,-1可能表示透明颜色或未定义的颜色。这里的-1实际上是一个32位整数,它的二进制表示形式为全1(11111111 11111111 11111111 11111111),即RGBA四个组件的值都是255,表示白色且完全透明。

当然,这种表示方法和含义可能因编程语言、库或框架而异。在某些情况下,颜色值可能需要进行特定的处理或转换,以便正确地表示和使用。
#4
吹水佬2023-04-30 19:51
以下是引用yuma在2023-4-30 17:56:29的发言:

AI说,-1表示为透明色。

在计算机编程中,颜色值通常表示为一个整数。对于32位颜色,这个整数可以表示为一个包含四个8位组件(RGBA)的值:红色(R),绿色(G),蓝色(B),和透明度(A)。每个组件的取值范围是0到255。然后,这四个组件的值被组合成一个32位整数。

颜色值可以等于-1,是因为在某些情况下,-1具有特殊的含义。例如,在某些编程语言和库中,-1可能表示透明颜色或未定义的颜色。这里的-1实际上是一个32位整数,它的二进制表示形式为全1(11111111 11111111 11111111 11111111),即RGBA四个组件的值都是255,表示白色且完全透明。

当然,这种表示方法和含义可能因编程语言、库或框架而异。在某些情况下,颜色值可能需要进行特定的处理或转换,以便正确地表示和使用。

这说法是针对32位像素的颜色定义
你提的问题也许不一定是AI说的一回事
可以这样试试:
看看 Se/65536 的值是什么。如果是0xFFFF,那Point方法返回的是32位颜色值;如果是0xFF,那Point方法返回的是24位颜色值。
#5
yuma2023-04-30 20:53
回复 4楼 吹水佬
当se=-1时,se /65536结果如下:

只有本站会员才能查看附件,请 登录
#6
吹水佬2023-05-01 06:43
回复 5楼 yuma
变成有符号整数运算了
或者这样直接观测一下:
HEX(Picture1.Point(I, J))
#7
yuma2023-05-01 17:58
看看 Se/65536 的值是什么。如果是0xFFFF,那Point方法返回的是32位颜色值;如果是0xFF,那Point方法返回的是24位颜色值。

当se=-1时:
hex(se /65536) = 0

hex(se)=FFFFFFF
#8
吹水佬2023-05-01 18:04
以下是引用yuma在2023-5-1 17:58:16的发言:

看看 Se/65536 的值是什么。如果是0xFFFF,那Point方法返回的是32位颜色值;如果是0xFF,那Point方法返回的是24位颜色值。

当se=-1时:
hex(se /65536) = 0

hex(se)=FFFFFFF

不能用 se/65536 运算,VB好像没有32位无符号整数的数据类型,不能声明无符号整数类型变量。
最好直接用 HEX(Picture1.Point(I, J)) 观测,不要通过“中介”。

另:hex(se)=FFFFFFF 这是28位,好像没有28位像素的说法,是不是多了一个“F”,还是少了一个“F”。

[此贴子已经被作者于2023-5-1 18:12编辑过]

#9
吹水佬2023-05-03 09:54
测试一下,就如2楼说的。
只有本站会员才能查看附件,请 登录
1