我正在寻找一种从 ActionScript 3 中的 bitmapData 对象中过滤特定颜色的有效方法。目前我使用带有 readByte32() 的循环。这需要大约一秒钟的时间来处理,这是不可接受的。我一直在尝试让 paletteMap() 工作,但到目前为止还无法掌握它的 API(任何真正有用的链接?谷歌让我失望了......)。
这是我目前的逻辑,我想改进:
var n:int = bitmapData.width;
for (var i:int = 0; i < n; i++) {
var m:int = bitmapData.height;
for (var j:int = 0; j < m; j++) {
var color:int = bitmapData.getPixel(i, j);
if (color == 0xCACACA) {
bitmapData.setPixel32(i, j, 0x00000000);
}
}
}
我可以通过使用 Vectors 获得更好的性能,但它只是稍微好一点......
var v:Vector.<uint> = bitmapData.getVector(bitmapData.rect);
var n:int = bitmapData.width * bitmapData.height;
for (var i:int = 0; i < n; i++) {
var color:uint = v[i];
v[i] = color == 0xFFCACACA ? 0x00000000 : color;
}
bitmapData.setVector(bitmapData.rect, v);
我真的认为必须有更好的方法来做到这一点,只需要几百毫秒。如果有人能为我解开bitmapData的奥秘,你就是我族人的新领袖。
PS 我正在使用 bitmapData.lock() 和 unlock(); 我只是没有发布样板文件。