VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)

VB爱好者乐园(VBGood)

 找回密码
 立即注册
搜索
查看: 438|回复: 21

[求助] VB位运算结果出人意料

[复制链接]
发表于 2017-9-6 13:28:24 | 显示全部楼层 |阅读模式
在提取RGB单通道色值时需要用到位运算来提取色值。目前RGB颜色都是采用RGB888格式存储的。
假定有颜色Color=rgb(0,0,255);
我通过对Long型数值color位运算得到红绿蓝三种单通道色值。
按照道理说,没有任何技术含量。
代码如下:
red=color and &HFF                 '提取最低字节的红色单通道
green=(color and &HFF00) / &H100        '提取第二字节的绿色单通道
blue=(color and &HFF0000) /&H10000    '提取最高字节的蓝色单通道
就是这个样子,结果得出的值并不如意
red=0,green=65280,blue=255
我测试好多遍都是65280(即&HFF00),不知道哪里的问题,在立即窗口也是这个样子
而把位运算两侧的16进制数换成10进制数却可以得出正确答案0.
这个网站大神云集,我知道自己的问题太不起眼了,但是还是希望各位大神不吝赐教,指点迷津。
发表于 2017-9-6 21:17:40 | 显示全部楼层
2017-09-06_211545.jpg
2017-09-06_211545.jpg
回复 支持 1 反对 0

使用道具 举报

发表于 2017-9-6 16:22:52 | 显示全部楼层
green=(color and &HFF00&) / &H100
&HFF00后加一个&符号,强制常数为long型,否则默认为integer。
回复 支持 1 反对 0

使用道具 举报

发表于 2017-9-6 20:19:15 | 显示全部楼层
TearsOfDawn 发表于 2017-9-6 19:54
还是有点不明白,Long型4个字节,Integer型2个字节,但是这怎么影响到了逐位比较呢?
VB中位运算有什么 ...

&HFF00在由Integer转为Long时被当作有符号数转为了&HFFFFFF00。
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2017-9-6 13:44:38 | 显示全部楼层
急求指教!在线等。。。莫要沉了我的提问啊
回复 支持 反对

使用道具 举报

发表于 2017-9-6 16:23:19 | 显示全部楼层
green=(color and &HFF00&) / &H100  &HFF00后加一个&符号,强制常数为long型,否则默认为integer。
回复 支持 反对

使用道具 举报

发表于 2017-9-6 17:20:21 | 显示全部楼层
本帖最后由 ymismy 于 2017-9-6 17:24 编辑


green = color \ &H100 Mod &H100  ' 提取第二字节的绿色单通道
回复 支持 反对

使用道具 举报

发表于 2017-9-6 17:25:56 | 显示全部楼层
red = color Mod &H100               '提取最低字节的红色单通道
green = color \ &H100 Mod &H100  ' 提取第二字节的绿色单通道
blue = color \ &H100 \ &H100     '提取最高字节的蓝色单通道
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-6 19:54:19 | 显示全部楼层
lowxiong 发表于 2017-9-6 16:23
green=(color and &HFF00&) / &H100  &HFF00后加一个&符号,强制常数为long型,否则默认为integer。

还是有点不明白,Long型4个字节,Integer型2个字节,但是这怎么影响到了逐位比较呢?
VB中位运算有什么需要注意事项么,感谢你的再次回答。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-6 20:09:07 | 显示全部楼层
ymismy 发表于 2017-9-6 17:25
red = color Mod &H100               '提取最低字节的红色单通道
green = color \ &H100 Mod &H100  ' 提 ...

你的方法我试过,但是出现了问题。例如定义color=rgb(255,0,0)
按照你的代码得出的结果是:red=255,green=1.blue=0
其余颜色提取也有类似的错误,就是多出来一个1.望在考虑一下,共同解决这个问题。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-6 20:26:22 | 显示全部楼层
Apple_0 发表于 2017-9-6 20:19
&HFF00在由Integer转为Long时被当作有符号数转为了&HFFFFFF00。

醍醐灌顶,非常感谢!!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

文字版|手机版|小黑屋|VBGood  

GMT+8, 2017-9-26 01:09

VB爱好者乐园(VBGood)
快速回复 返回顶部 返回列表