Come ridimensionare (e croppare) un'immagine con .NET

Oggi mi sono imbattuto in problema "strano" per chi è abitutato a lavorare come me su applicazioni di puro data retrivial via web: il ridimensionamento di un'immagine da codice.

Prima di .NET mi ricordo che c'era da smattire con GDI, directX, puntatori... insomma, una cosa complessa.

Con C# è invece tutto molto facile. Ecco il codice, commentato:


// Carico l'oggetto Image dal file sorgente da ridimensionare
System.Drawing.Image oImg = System.Drawing.Image.FromFile(sourceFileName); 

// Creo un'immagine bitmap delle dimensioni dell'immagine ridimensionata
System.Drawing.Image oThumbNail = new Bitmap((int)finalW, (int)finalH, oImg.PixelFormat);

// Creo una "drawing surface", ossia una lavagna sulla quale disegnare
// che si appoggia sulla bitmap appena creata
Graphics oGraphic =  Graphics.FromImage(oThumbNail);

// Setto tutto alla massima qualità (tanto è un'operazione "batch", non realtime)
oGraphic.CompositingQuality = CompositingQuality.HighQuality ;
oGraphic.SmoothingMode = SmoothingMode.HighQuality ;
oGraphic.InterpolationMode = InterpolationMode.HighQualityBicubic ;

// Definisco un'area rettangolare della dimensione finale
Rectangle oRectangle = new Rectangle(0, 0, (int)finalW, (int)finalH);

// Ridimensiono e croppo:
// in pratica tutta l'operazione sta in questo metodo, che esiste in 30 versioni
// questa prende una zona dell'immagine originale (da cropStartX-Y con dimensioni
// cropW-cropH) e la disegna nel rettangolo appena definito dell'oggetto graphic.
oGraphic.DrawImage(oImg, oRectangle,(float)cropStartX,(float)cropStartY,
                        (
float)cropW,(float)cropH,GraphicsUnit.Pixel);

// Poi salvo il file in formato jpeg
oThumbNail.Save(outputFileName,ImageFormat.Jpeg); 

// "Butto" i due oggetti immagine
oImg.Dispose(); 
oThumbNail.Dispose();

Tutto questo cercando su MSDN, dalla necessità alla "produzione" in mezza giornata.

powered by IMHO 1.2

posted @ lunedì 2 maggio 2005 17:59

Print
Comments have been closed on this topic.
«ottobre»
domlunmarmergiovensab
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456