2008-12-23 25 views
5

Actualmente estoy usando la siguiente función para cargar una imagen, sin embargo no pude encontrar una manera de encontrar el ancho de la imagen cargada, que tengo la intención de usar antes colocando la siguiente imagen usando la misma función.Encontrar el tamaño de imagen cargado en AS3 (ActionScript 3.0)

Tenga en cuenta que q es una variable (un número) que se utiliza para cargar diferentes imágenes.

= X Necesito ayuda obtainning el ancho de la imagen cargada ...

function LoadImage(q) 
{ 
    var imageLoader:Loader = new Loader(); 
    var image:URLRequest = new URLRequest("GalleryImages/Album1/"+q+".jpg"); 
    imageLoader.load(image); 
    addChild (imageLoader); 
    imageLoader.x = 0 + CurrentXLength; 
    imageLoader.y = 0; 
    imageLoader.name = "image"+q; 
    trace(imageLoader.x) 
} 

Respuesta

1

Para acceder a la anchura debe hacerlo dentro de la función asignada para manejar Event.COMPLETE.

"Querrá una matriz que contenga los elementos que desea cargar. Probablemente debería cargar esta información en XML para que sea dinámica y escalable. Una vez cargados los datos xml, debe asignarse a una matriz de la forma que sea. La razón por la que debemos usar una matriz en esta situación, en lugar de simplemente usar el objeto XML, que es esencialmente una matriz, es porque necesita conocer el ancho de los objetos para poder basar la siguiente posición X de los objetos los últimos objetos posición X más su ANCHO

Con XML es común utilizar un bucle for y simplemente iterar a través de "x" cantidad de veces. No queremos esto, en este caso. Para obtener el "ANCHO" propiedad del activo cargado, se debe acceder desde dentro de la función asignada para disparar cuando el cargador dispara Event.COMPLETE. Una vez que la imagen se haya completado, eliminará el elemento de la matriz, establecerá una variable como lastX y lastWidth, y luego obtendrá el siguiente elemento de la matriz y comenzará de nuevo. Finalmente, la matriz está vacía y el proceso está completo.

-Nota: Voy a omitir la carga del XML y simplemente inyectar los datos en la matriz de mí mismo.

package 
{ 
    import flash.display.Sprite; 
    import flash.display.Loader; 
    import flash.net.URLRequest; 

    public class DocumentClass extends Sprite 
    { 
     private var _array:Array; 
     private var _lastX:Number; 
     private var _lastWidth:Number; 

     public function DocumentClass():void 
     { 
      _array = new Array(); 
      //Add Items to an array however you wish. I did it 
      //this way to make it easier to read on this site. 

      _array.push({name: "image1", path: "path/to/image1"}); 
      _array.push({name: "image2", path: "path/to/image2"}); 
      _array.push({name: "image3", path: "path/to/image3"}); 

      loadImage(); 
     } 
     private function loadImage():void 
     { 
      if(_array.length > 0) 
      { 
       var loader:Loader = new Loader(); 
       addChild(loader); 

       var request:URLRequest = new URLRequest(_array[0].path); //Loads first item in the array each time. 
       loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoaded); 
       loader.x = _lastX + _lastWidth; 
       laoder.load(request); 

       _lastX = loader.x; //We set after so we are ready for the next. 

       _array.shift(); //Remove the first item from the array. 
      } 
     } 
     function onImageLoaded(e:Event):void 
     { 
      _lastWidth = e.target.width; 
      loadImage(); //Attempt to load another image if the array isn't empty. 
     } 
    } 
} 

Espero que esto ayude, el código no está probado, pero el concepto parece válido.

12

No puedes saber el ancho del mapa de bits hasta que se carga realmente:

function LoadImage(q) 
{ 
    var imageLoader:Loader = new Loader(); 
    var image:URLRequest = new URLRequest("GalleryImages/Album1/"+q+".jpg"); 
    imageLoader.contentLoader.addEventListener(Event.COMPLETE, ImageLoaded); 
    imageLoader.load(image); 
    addChild (imageLoader); 
    ... 


private function ImageLoaded(e:Event):void 
{ 
    var imageLoader:Loader = Loader(e.target.loader); 
    var bm:Bitmap = Bitmap(imageLoader.content); 
    var CurrentXLength = bm.width; 
    .... 

Alternativly this link podría ser útil? No lo he probado yo mismo ...

+0

Gracias, esto ayudó , aunque creo que el código es 'content_loader.contentLoaderInfo.addEventListener (Event.CO' y no' imageLoader.contentLoader' ... –

0

Sí, he usado la respuesta de scott, pero vale la pena señalar que 'imageLoader.contentLoader' debería ser 'imageLoader.contentLoaderInfo' en la función LoadImage(). Resuelto el problema resuelto gracias a la anchura me-- mang

2

simplemente pedí propiedad de ancho del objeto cargador:

var loader:Loader; 

function loadImage(dir:String):void { 
    loader = new Loader(); 
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, placeImage); 
    var urlReq:URLRequest = new URLRequest(direccion); 
    loader.load(urlReq); 
} 

function placeImage(o:Event):void { 
    loader.x = (1360 - loader.width)/2; 
    loader.y = (768 - loader.height)/2; 
    addChild(loader); 
} 

Dónde 1360 y 768 son las dimensiones de la lona ...

Cuestiones relacionadas