BitmapData.getPixel32()返回值不准确,为什么?
BitmapData.getPixel32() 方法可以获得某像素点的 ARGB 颜色值,它包含 Alpha 通道数据和 RGB 数据。但最近发现它返回的 ARGB 数据并不是百分百准确的(我的Flash Player版本为 10.1 RC)。在什么情况下不准确呢?我说不准。但,我可以肯定的是,只要 alpha 通道为 0xFF(即 255),那么它肯定准确;也就是说,一旦 alpha 通道不为 0xFF ,它就有可能不准确。以下是一个极简单的例子:
var bmd:BitmapData = new BitmapData(100, 100, true, 0);
bmd.setPixel32(0, 0, 0×44536435); // 把坐标为(0, 0)的点设置颜色值 0×44536435
trace(bmd.getPixel32(0, 0).toString(16)); // 输出 44526534 ,明显有偏差
这是在 Flash Player 10.1 RC 版本下测试,为什么出现这种情况呢?不清楚。可能是bug,也可能不是。因为有这种情况的出现,所以很多有趣的玩法都不能实现了。
评论
被,被你发现了,挖哈哈……
回复他(她)
Y.Boy Reply:
四月 18th, 2010 at 19:33
鼠标炸弹有什么解决方法吗?
以前网友问起,没引起注意。直到现在我才发现。。。
回复他(她)
mousebomb Reply:
四月 19th, 2010 at 09:26
我很遗憾,没有解决方案。这玩意要问官方……
回复他(她)
Y.Boy Reply:
四月 19th, 2010 at 09:51
Oh, my god.
回复他(她)
会不会是rc版的问题呢?中文输入都有问题!
回复他(她)
Y.Boy Reply:
四月 18th, 2010 at 19:33
你的中文输入问题是什么?
回复他(她)
这是一个很多年的问题,只要你Google下“getpixel as3 inaccurate”,你就会发现一大堆这问题,但貌似解答的方法甚为少,貌似这是Alpha通道引发的一个Bug,一直悬而未决…. 参考地址: http://url.cn/33WL94
回复他(她)
见怪不怪了
回复他(她)
[...] 事情发展的起因是这样的:BitmapData.getPixel32()返回值不准确,为什么? 网友Norris很热心,他把他的观点写得井井有条:http://www.norris2u4.com/?p=370 。在继续往后阅读前,先看看我的总结,造成 getPixel32() 返回值存在偏差的根本原因是:BitmapData 存储的像素数据并不是各通道(ARGB)的原始数据,而是 RGB 跟 Alpha 通道相乘后的数据。在调用 BitmapData.getPixel32() 方法时,Flash Player 虽然返回的是未经相乘的 ARGB 数据,但这个数据是还原后的 ARGB ,而不是原始 ARGB 。以下例子说明了这一点: var bmd:BitmapData = new BitmapData(100, 100, true, 0); bmd.setPixel32(0, 0, 0×44536435); // 把坐标为(0, 0)的点设置颜色值 0×44536435 trace(bmd.getPixel32(0, 0).toString(16)); // 输出 44526534 ,明显有偏差 [...]
发表评论