【发布时间】:2011-03-06 17:18:04
【问题描述】:
我正在寻找一种从 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);
我真的认为必须有更好的方法来做到这一点,只需要 100 毫秒。如果有人能为我解开bitmapData的奥秘,你就是我族人的新领袖。
PS 我正在使用 bitmapData.lock() 和 unlock();我只是没有发布样板文件。
【问题讨论】:
标签: actionscript-3 bitmap bitmapdata palette getpixel