Быстрое бикубическое или билинейное изменение размера изображения во Flash - Flex - actionscript 3 - PullRequest
1 голос
/ 13 января 2011

Мне нужно изменить размер изображения в ActionScript, поддерживая качество, также известное как бикубическое или билинейное изменение размера. На данный момент мой алгоритм просто проходит через каждый пиксель и вычисляет новый пиксель. Пример:

            /* Loop through the pixels of the output image, fetching the equivalent pixel from the input*/
            for (var x:int = 0; x < width; x++) {
                for (var y:int = 0; y < height; y++) {
                                                bitmapDataTemp2.setPixel(x, y, newBitmapData2.getPixelBilinear(x * xFactor, y * yFactor));
                                                //bitmapDataTemp2.setPixel(x, y, newBitmapData2.getPixelBicubic(x * xFactor, y * yFactor));
                }
            }

Это действительно медленно и позорно, что во флеш-плеере нет многопоточности, , поэтому мне было интересно, какие приемы я могу использовать для ускорения? Большое спасибо.

1 Ответ

1 голос
/ 13 января 2011

Вы должны использовать BitmapData.setVector () вместо setPixel. Посмотрите на этот пример:

var canvas:BitmapData=new BitmapData(255,255,false,0x000000);
addChild(new Bitmap(canvas, "auto", true));
 
var size:int = canvas.width * canvas.height;
var cols:int = canvas.width;
 
var pixels:Vector.<uint> = new Vector.<uint>(size);
 
canvas.lock();
for (var i:int  = 0; i<size; i++) {
    var ox:uint= i % cols;
    var oy:uint= i / cols;
    // just an example of what you can do:
    // pixels[i] = oy <<16 | ox;
    pixels[i] = newBitmapData2.getPixelBilinear(ox * xFactor, oy * yFactor);
}
   
canvas.setVector(canvas.rect, pixels);
canvas.unlock();

Вы должны рассмотреть возможность включения функции newBitmapData2.getPixelBilinear. Это также значительно ускорит процесс.

...