AIR对Mobile设备位图取色的问题
在网页游戏开发中,我经常使用bitmapData.getPixel32来获得单击的部位的透明度值,以此来确定是否交互。
在PC平台中,这个用法是很靠谱的:
1public function checkOpaque($x:Number,$y:Number):Boolean
2{
3 //如果没有图像,当然是透明的
4 if(!this.bitmapData) return false;
5 var __argb:uint = this.bitmapData.getPixel32($x,$y);
6 //否则就判断透明度
7 return (__argb>>24&0xFF) > 0;
8}
但是,到了Mobile平台上,这个方法就有问题,使用getPixel32获得透明部分的像素值,得到的是16777216!
这个值其实是2的24次方。也就是说,在Mobile平台上,getPixel32只能支持到24bit色彩!
那么,是不是我的设置不正确呢?在AIR项目配置文件中,可以设置colorDepth,默认值为16bit,将其设置为32bit,还是没有作用。
所以只能把判断函数改成这样了:
1public function checkOpaque($x:Number,$y:Number):Boolean
2{
3 //如果没有图像,当然是透明的
4 if(!this.bitmapData) return false;
5 var __argb:uint = this.bitmapData.getPixel32($x,$y);
6 trace('单击的像素的颜色:', __argb.toString(16));
7 //手机上可能最大只能支持到24bit颜色,所以当颜色等于24bit颜色的最大值的时候,直接认为像素是透明的
8 if(__argb == 0x1000000) return false;
9 //否则就判断透明度
10 return (__argb>>24&0xFF) > 0;
11}
- 文章ID:1600
- 原文作者:zrong
- 原文链接:https://blog.zengrong.net/post/air_mobile_getpixel32/
- 版权声明:本作品采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可,非商业转载请注明出处(原文作者,原文链接),商业转载请联系作者获得授权。