2011-12-26 2 views
8

C'è un modo per ottenere un'altezza .png senza creare ImageView?Titanio: ottieni altezza png senza creare ImageView

I metodi che ho trovato su google richiedono prima create createImageView e poi eseguiamo un .height.

Voglio evitare di creare ImageView perché creeròImageView dopo aver ottenuto l'altezza del png ed eseguire alcune modifiche.

O meglio, userò il valore di altezza durante la var imagevariablename = Ti.UI.createImageView stesso, quindi non posso usare imagevariablename.height perché la dichiarazione di var imagevariablename non è ancora stata eseguita.

risposta

6

Non conosco alcun modo per ottenere l'altezza/larghezza di un'immagine senza creare un'immagineView in Titanium. Nella mia app, creo una visualizzazione temporanea dell'immagine e leggo gli attributi senza mai aggiungerla a una vista/finestra. Quindi è possibile creare la 'vera' visualizzazione dell'immagine una volta che si conosce la dimensione:

var imageTemp = Ti.UI.createImageView({ 
    image : someFile.read(), 
    height:'auto', 
    width:'auto' 
}); 
Ti.API.info("height=" + imageTemp.size.height); 
Ti.API.info("width=" + imageTemp.size.width); 
imageTemp = null; 
+0

Non funziona con sdk versione 2.1.1.GA –

1

Se si crea un blob dalla vostra immagine è possibile ottenere la larghezza e l'altezza dal blob

Da documenti di titanio: Se questo blob rappresenta un'immagine, questa è l'altezza dell'immagine in pixel.

4

provare questo codice

var imageTemp = Ti.UI.createImageView({ 
    image : <image>, 
    height:'auto', 
    width:'auto' 
}), 
imageSize = imageTemp.toImage(); 

Ti.API.info("height=" + imageSize.height); 
Ti.API.info("width=" + imageSize.width); 

imageTemp = imageSize = null; 
1

Nella mia condizione di questo è gestito in questo modo.

var imageTemp = Ti.UI.createImageView({ 
    image : someFile.read(), 
    height:'auto', 
    width:'auto' 
}); 
alert("height=" + imageTemp.toBlob().height); 
alert("width=" + imageTemp.toBlob().width); 
imageTemp = null; 
1

Stavo lavorando su questo e ho avuto problemi con il codice sopra utilizzando 3.2.2, test su Android. Vari tentativi mi darebbero solo 1, 0 o SIZE per i valori di larghezza e altezza. Questo utilizza un imageView, ma quanto segue mi dà tutto ciò di cui ho bisogno in questo ambiente. Sto anche usando l'evento load invece di postLayout. Spero che questo aiuti qualcuno.

$.map.image = 'http://getyourownimage.com/dev/8fac94c6-872b-4bda-a56a-7dba09188c66.png'; 
$.map.zIndex = 1; 
$.map.width = 'auto'; 
$.map.height = 'auto'; 

$.map.addEventListener('load',function(e){ 
    var rect = $.map.getRect(); 
    Ti.API.info(rect.width); //actual width of imageView 
    Ti.API.info(rect.height); //actual height of imageView 
    Ti.API.info($.map.getWidth()); //returns auto/SIZE, doesn't work 
    Ti.API.info($.map.getHeight()); //returns auto/SIZE, doesn't work 
    Ti.API.info($.map.toImage().width); //some scaled value, not useful 
    Ti.API.info($.map.toImage().height); //some scaled value, not useful 
    Ti.API.info($.map.toBlob().width); //image original/full size width 
    Ti.API.info($.map.toBlob().height); //image original/full size height  
    alert('rectX:'+rect.width+',rectY:'+rect.height+',mapGW:'+$.map.getWidth()+',mapGH:'+$.map.getHeight()+',tiX:'+$.map.toImage().width+',tiY:'+$.map.toImage().height+',tbX:'+$.map.toBlob().width+',tbY:'+$.map.toBlob().height); 
});