Flash 中将不透明的 Bitmap 透明化处理

在开发过程中发现从 ArcGIS 服务器上下载的瓦片不是透明的,在客户端需要进行透明化处理,由于下载后将图片内容绘制到一个 BitmapData 上,因此如何将 BitmapData 中的像素进行透明化处理是关键;

首先采用网上找来的答案,就是双层循环使用getPixel32将每一个像素的值取出来,和需要进行透明的颜色进行比对,如果一致,则直接使用setPixel32 将颜色设置为透明色,发现可以成功工作,但是在图片较多时总感觉有些慢;

在后来找到一个函数:threshold , 在该函数中指定几个数值,就可以做直接对全图进行处理,示例如下:

var sourceColor : uint = 0x00FDFDFD ;
var targetColor : uint
= 0xFF000000 ;
var colorMask : uint
= 0x00FFFFFF ;
var rect : Rectangle
= new Rectangle( 0 , 0 , tileBitmap.width , tileBitmap.height );
tileBitmap.threshold( tileBitmap , rect , destPoint ,
"==" , sourceColor , targetColor , colorMask );

关于 threshold 函数的用法帮助中有详细的说明,不再赘述,关键是通过对比发现,处理 256 * 256 的图片,使用 threshold 函数的耗时一般是 0到1毫秒,而使用getPixel32 和 setPixel32 则是 25 到 26毫秒效率的差别非常明显,这让人不仅联想:threshold 函数一定是内置的 C 语言实现的,因为这个效率的差别正好是java等字节码和C语言本机码直接的效率差别,一般都是在 20 倍以上;

原文地址:https://www.cnblogs.com/WonKerr/p/Flash_BitmapData_Threshold.html