Guide C# – Calcolare dimensione Jpeg prima di salvarla sul Disco

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 biggrin emoticon

This entry was posted in Linguaggi .Net, Programmazione and tagged , , , , , , . Bookmark the permalink.

Lascia un Commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *

*

È possibile utilizzare questi tag ed attributi XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>