actionscript 3 - Encontrar el tamaño de imagen(cargado) en AS3(Action Script 3.0)
actionscript-3 size (4)
Actualmente estoy utilizando 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 utilizar antes de colocar la siguiente imagen con la misma función.
Tenga en cuenta que q es una variable (un número) que se utiliza para cargar imágenes diferentes.
= X Necesito ayuda para obtener 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)
}
No puede conocer el ancho del mapa de bits hasta que se cargue 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;
....
Alternativamente, este enlace podría ser útil? No lo he probado yo mismo ...
Sí, utilicé 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 de ancho para mí-- gracias mang
Acabo de solicitar la 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);
}
Donde 1360 y 768 son las dimensiones del lienzo ...
Para acceder al ancho, debe hacerlo dentro de la función asignada para manejar Event.COMPLETE.
"Querrás una matriz que contenga los elementos que deseas cargar. Probablemente deberías cargar esta información en XML para que sea dinámica y escalable. Una vez cargados los datos xml, se los debe asignar a una matriz de la forma que desees. razón por la cual 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 objetos en los últimos objetos X posición más su ANCHO.
Con XML, es común usar un ciclo for y solo iterar a través de "x" cantidad de veces. No queremos esto, en este caso. Para obtener la propiedad "ANCHO" del activo cargado, se debe acceder desde la función asignada para disparar cuando el cargador activa 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 de 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.