2011-01-13 4 views
1

일급 바이 큐빅 또는 바이 리니어 크기 조절을 유지하면서 이미지를 크기 조정해야합니다. 현재 알고리즘은 모든 단일 픽셀을 반복하고 새로운 픽셀을 계산합니다. 예 :빠른 바이 큐빅 또는 바이 리니어 이미지 크기가 플래시로 조정됩니다. - Flex - 액션 스크립트 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()를 사용해야합니다. 당신은 newBitmapData2.getPixelBilinear 기능을 인라인 고려해야한다

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(); 

이 예에서보세요. 그렇게하면 속도가 크게 향상됩니다.

관련 문제