私はActionScript3のbitmapDataオブジェクトから特定の色をフィルタリングする効率的な方法を探しています。現在、readByte32()でループを使用しています。これは処理に約1秒かかりますが、これは許容できません。私はpaletMap()を機能させようと試みてきましたが、これまでのところその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);
これを行うには、数百ミリ秒しかかからないより良い方法があるはずだと本当に思います。誰かが私のためにbitmapDataの謎を解き明かすことができれば、あなたは私の人々の新しいリーダーになります。
PS私はbitmapData.lock()とunlock()を使用しています。ボイラープレートのものを投稿しませんでした。