Y.Boy's Blog

Web Game,Flex,Flash,AIR,RIA,ActionScript,Pixel Bender

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,也可能不是。因为有这种情况的出现,所以很多有趣的玩法都不能实现了。

有解答了详细分析为什么BitmapData.getPixel32()返回值不准确

标签:BitmapData, getPixel32

相关日志


评论


1
作者:  mousebomb | 日期:  2010年4月18日 | 时间:  17:17

被,被你发现了,挖哈哈……

回复他(她)

Y.Boy Reply:

鼠标炸弹有什么解决方法吗?
以前网友问起,没引起注意。直到现在我才发现。。。

回复他(她)

mousebomb Reply:

我很遗憾,没有解决方案。这玩意要问官方……

回复他(她)

Y.Boy Reply:

Oh, my god.

回复他(她)

2
作者:  onelong | 日期:  2010年4月18日 | 时间:  18:00

会不会是rc版的问题呢?中文输入都有问题!

回复他(她)

Y.Boy Reply:

你的中文输入问题是什么?

回复他(她)

3
作者:  Norris | 日期:  2010年4月19日 | 时间:  01:00

这是一个很多年的问题,只要你Google下“getpixel as3 inaccurate”,你就会发现一大堆这问题,但貌似解答的方法甚为少,貌似这是Alpha通道引发的一个Bug,一直悬而未决…. 参考地址: http://url.cn/33WL94

回复他(她)

4
作者:  芒果 | 日期:  2010年4月19日 | 时间:  12:03

见怪不怪了

回复他(她)

[...]         事情发展的起因是这样的: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 ,明显有偏差 [...]



发表评论

Note: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*
To prove you're a person (not a spam script), type the security word shown in the picture.
Anti-spam image