ActionScript 3에서 bitmapData 객체의 특정 색상을 필터링하는 효율적인 방법을 찾고 있습니다. 현재는 readByte32() 루프를 사용하고 있습니다. 이것은 받아 들일 수없는 과정에 약 1 초가 걸립니다. paletteMap()을 사용하려고 노력했지만 지금까지 API (모든 유용한 링크? Google은 나를 실패했습니다 ...)를 파악할 수 없었습니다. 난 정말이 생각bitmapData 객체 (또는 바이트 배열)에서 특정 색상을 필터링하는 방법
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);
...
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);
}
}
}
내가 벡터를 사용하여 약간 더 나은 성능을 얻을 수 있지만 그것은 단지 변두리에 더 나은 :
는 여기에 내가 향상시키고 자하는 나의 현재의 논리입니다 이 작업을 수행하는 더 좋은 방법은 100 밀리 초 밖에 걸리지 않습니다. 누구든지 나를 위해 bitmapData의 신비를 풀 수 있다면 내 사람의 새로운 리더가 될 것입니다.
PS bitmapData.lock() 및 unlock();을 사용하고 있습니다. 나는 그 보일러 판 물건을 게시하지 않았다.
고마워, 내가 이것을 시도하고 성능을 비교하자. 너에게 다시 돌아갈 게. – user372950
그냥 놀랍습니다. threshold() 사용은 위의 시도보다 100 배 이상 빠릅니다. 나는 그런 복잡한 방법이 그렇게 빨리 작동한다고 믿을 수 없다. 정말 고맙습니다! – user372950
@jpwrunyan. 문제 없어. 'threshold'는 여러분의 코드가하는 것과 거의 동일하게 여기에 있습니다. 하지만 큰 차이점은 기본적으로 실행된다는 것입니다. 이것은 항상 모든 액션 스크립트를 이길 것입니다. 엄지 손가락의 규칙에 따라 setPixel/getPixel 호출을 볼 때마다, 특히 빡빡한 루프에서 호출 할 때마다 네이티브 함수로 바꾸는 방법을 찾으십시오. 그렇게 할 수 없다면 픽셀 벤더가 도움이 될 수 있지만 원시 코드만큼 빠르지는 않습니다. –