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