Salve a tutti, essendo che come avrete immaginato in questo periodo sto lavorando con le immagini in C#, mi è capitato di dover valutare qual’è la dimensione approssimativa di un file immagine salvato su disco, prima però di salvarlo effettivamente… Tipo per sapere se c’è abbastanza spazio disponibile e così via. Essendo che cercando in giro per la rete non ho trovato anima viva che potesse aiutarmi, mi sono dovuto arrangiare con una soluzione personalizzata.
Il concetto del problema è questo:
Ho un’immagine in memoria. Di questa immagine io devo farne diverse trasformazioni, quindi ad esempio ridimensionarla, cambiare i colori, applicare effetti, cambiarne la qualità ecc. In seguito a tutte queste trasformazioni io devo essere in grado di sapere a priori la dimensione dell’immagine salvata su disco.
La soluzione più banale che mi è venuta in mente è stata questa:
public static long GetCompressedImageSize(Image image, Size size, long compression)
{
/*diverse trasformazioni
* .......
*/
MemoryStream stream = new MemoryStream();
SaveJPG(image, stream, compression);
long length = stream.Length;
stream.Dispose();
return length;
}
In questo modo io creo uno stream in memoria, gli salvo all’interno l’immagine e richiedo allo stream la sua dimensione (in byte) e ritorno questo valore dalla funzione. Ovviamente la funzione SaveJPG è quella che ho illustrato in questo articolo qualche giorno fa.
Probabilmente non è la soluzione migliore, ma per il momento è quella più efficace. Se conoscete altri metodi potete mandarmi tutti i commenti che volete ![]()
Mi chiamo Denis Billi, ho 25 anni e sono della provincia di Ravenna. Mi sono laureato nell'estate del 2008 presso la facoltà di Ingegneria Informatica dell'università di Bologna e attualmente sto seguendo i corsi per la Laurea Specialistica in Ingegneria Informatica sempre all'università di Bologna.