Я ищу эффективный способ фильтрации определенного цвета из объекта bitmapData в ActionScript 3. В настоящее время я использую цикл с readByte32 (). Обработка занимает около секунды, что недопустимо. Я пытался заставить работать paletteMap (), но до сих пор не смог понять его API (какие-нибудь действительно полезные ссылки? Google подвел меня ...).
Вот моя текущая логика, которую я хочу улучшить:
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);
}
}
}
Я могу получить чуть лучшую производительность от использования Векторов, но она только немного лучше ...
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 (); Я просто не опубликовал шаблонные материалы.