2011-01-13 9 views
1

私は、bicubicまたはbilinearのサイズを変更することなく、品質を維持するために、actionscriptで画像のサイズを変更する必要があります。現時点では、私のアルゴリズムはすべての単一ピクセルをループし、新しいピクセルを計算します。例:ファーストバイキュービックまたはバイリニア画像のサイズをFlashで変更する - Flex - actionscript 3

  /* 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

setPixelの代わりにBitmapData.setVector()を使用する必要があります。この例を見て:

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機能をインライン化を検討すべきです。そうすることも、事態を大幅にスピードアップします。

関連する問題