2012-05-23 10 views
5

me gustaría escalar una BitmapData para diferentes tamaños, tales como 200, 400, 600 y 800.AS3 - Escala BitmapData

¿Qué es una buena manera de hacer eso?

Respuesta

10

No se puede escalar directamente un BitmapData pero se puede hacer un clon a escala de la misma. Aquí hay un ejemplo rápido para escalar un BitmapData:

package { 
import flash.display.Bitmap; 
import flash.display.BitmapData; 
import flash.display.Sprite; 
import flash.geom.Matrix; 

import mx.core.BitmapAsset; 

public class Test extends Sprite { 


    [Embed(source="test.jpg")] 
    private var Image:Class; 

    public function Test() { 

     var originalBitmapData:BitmapData = BitmapAsset(new Image()).bitmapData; 

     function scaleBitmapData(bitmapData:BitmapData, scale:Number):BitmapData { 
      scale = Math.abs(scale); 
      var width:int = (bitmapData.width * scale) || 1; 
      var height:int = (bitmapData.height * scale) || 1; 
      var transparent:Boolean = bitmapData.transparent; 
      var result:BitmapData = new BitmapData(width, height, transparent); 
      var matrix:Matrix = new Matrix(); 
      matrix.scale(scale, scale); 
      result.draw(bitmapData, matrix); 
      return result; 
     } 

     var bitmapA:Bitmap = new Bitmap(originalBitmapData); 
     addChild(bitmapA); 

     var bitmapB:Bitmap = new Bitmap(scaleBitmapData(originalBitmapData, 0.5)); 
     addChild(bitmapB); 

    } 
} 
} 
2

Establecer el ancho y alto de un objeto de mapa de bits escala esa imagen, así que cree un mapa de bits con su bitmapData y luego calcúlelo utilizando ancho/alto, o use scaleX/Y si desea usar valores de escala.

var bmp:Bitmap = new Bitmap(bmpData); 
bmp.width = 400; // or 600,800 etc. 
bmp.height = 400; 

Si no desea utilizar un objeto de mapa de bits y la escala o directamente la BitmapData ver este What is the best way to resize a BitmapData object?