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 ridimensionareSystem.Drawing.Image oImg = System.Drawing.Image.FromFile(sourceFileName); // Creo un'immagine bitmap delle dimensioni dell'immagine ridimensionataSystem.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 creataGraphics 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 finaleRectangle 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 jpegoThumbNail.Save(outputFileName,ImageFormat.Jpeg); // "Butto" i due oggetti immagineoImg.Dispose(); oThumbNail.Dispose();
Tutto questo cercando su MSDN, dalla necessità alla "produzione" in mezza
giornata.
powered by IMHO 1.2