274 messaggi dal 23 aprile 2008
ciao a tutti,

creo una immagine in questo modo:

Dim ie As New Image
PlaceHolder1.Controls.Add(ie)

e poi tento di assegnare il valore dell'altezza ad una variabile in questo modo:

Dim lung As Integer = ie.Height.Value
Label6.Text = lung

pero mi restituisce 0, come mai?
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,
nel tuo codice non si vede ma immagino che tu abbia valorizzato la proprietà ImageUrl prima di leggere il valore di Height.

Se è così, penso di capire la situazione: il fatto che l'altezza sia 0, nonostante tu abbia indicato il percorso di un'immagine, può sembrare alquanto strano. In realtà è normale perché il controllo Image non va ad aprire fisicamente l'immagine e perciò non può sapere quale sia la sua altezza.

Height è semplicemente un valore che verrà renderizzato dal controllo Image come style="height: ...", quindi è totalmente opzionale e il suo unico scopo è quello di permetterti di impostare un'altezza arbitraria, che può essere differente da quella dell'immagine.

Pensa al caso in cui tu voglia mostrare un'immagine come miniatura. A quel punto non ti interessa quale sia la sua dimensione originale ma vuoi che sia mostrata a video con una altezza fissa di 100px. Dunque faresti:
ie.Height = new Unit(100, UnitType.Pixel);


Se tu invece vuoi proprio ottenere l'altezza dell'immagine, devi prima caricarla in memoria usando l'altra classe Image, quella che si trova nel namespace System.Drawing.
//devo ottenere il percorso fisico del file se voglio che Image possa aprirlo
var percorsoFisico = Server.MapPath(ie.ImageUrl);
//carico l'Image in memoria e ne leggo la sua proprietà Height
using (var img = System.Drawing.Image.FromFile(percorsoFisico))
{
    Label6.Text = img.Height.ToString();
}

Tieni presente che, se le tue immagini sono molto grandi, sarebbe meglio non caricare l'intero file in memoria ma affidarsi ad un pezzo di codice che sia in grado di determinare le dimensioni leggendo giusto pochi bytes dall'intestazione del file. Prova questo, che è leggermente più complicato ma ti può dare prestazioni migliori.
http://stackoverflow.com/questions/111345/getting-image-dimensions-without-reading-the-entire-file

Infine, se per te non è fondamentale leggere le dimensioni lato server, puoi anche rimandare questo compito al client, che quell'immagine dovrà aprirla.
var ie = new Image();
//logo di google
ie.ImageUrl = "https://www.google.it/images/srpr/logo4w.png";
//gestisco l'evento client onload per leggere l'altezza ed inserirla in una span
ie.Attributes["onload"] = "javascript:this.nextSibling.innerHTML=this.height";
Page.Form.Controls.Add(ie);
//questa è la span che aggiungo subito dopo il controllo Image. Sarà il suo "nextSibling"
var span = new HtmlGenericControl("span");
Page.Form.Controls.Add(span);


ciao
Modificato da BrightSoul il 14 luglio 2013 14.37 -

Enjoy learning and just keep making
274 messaggi dal 23 aprile 2008
ti ringrazio molto, e scusa se non ti ho detto prima che uso il vb, mi daresti una mano a tradurlo?
11.886 messaggi dal 09 febbraio 2002
Contributi
Hai ragione, scusa, non avevo fatto caso che stavi usando il Vb.NET.
Prova questo tool:
http://converter.telerik.com/
Il codice di esempio è abbastanza semplice, dovrebbe riuscire a convertirtelo senza errori.

ciao

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.