2012-06-21 8 views
5

Le immagini che sono appena uscite dalle fotocamere digitali spesso superano le dimensioni di 2-3 MB, rendendo difficile il trasferimento tramite e-mail e altri modi. Ciò richiede che l'immagine sia ridimensionata (in termini di dimensioni del file e non di altezza o larghezza). Abbastanza simile a MS Paint che offre funzionalità di ridimensionamento delle immagini. Non ho una buona conoscenza delle teorie sui file di immagine. Le sarei grato se qualcuno mi può puntare verso seguenti fonti di informazione:Ridimensionamento immagine con C#

  • teoria Image (come i vari formati di immagine Lavoro jpeg, png, tiff, ecc).?

  • Come l'immagine perde la sua nitidezza quando ridimensionata? C'è un po 'di

  • Ci sono delle librerie gratuite .Net (sto usando 4.0) disponibili per fare questo? In caso contrario, posso utilizzare qualsiasi libreria utilizzando la interoperabilità?

Molte grazie,

+0

Leggi su "Colore quantizzazione" http://en.wikipedia.org/wiki/Color_quantization – BryanJ

+0

L'(immagine, larghezza, altezza) costruttore Bitmap fa un lavoro abbastanza credibile senza tante storie. –

+0

Qualità scadente, però. –

risposta

24

ridimensionamento delle immagini è la funzionalità è integrata nel framework .NET. Ci sono un paio di approcci differenti:

  • GDI +
  • WIC
  • WPF

Ecco una bella blog post che copre le differenze tra loro.

Ecco un esempio con GDI +:

public void Resize(string imageFile, string outputFile, double scaleFactor) 
{ 
    using (var srcImage = Image.FromFile(imageFile)) 
    { 
     var newWidth = (int)(srcImage.Width * scaleFactor); 
     var newHeight = (int)(srcImage.Height * scaleFactor); 
     using (var newImage = new Bitmap(newWidth, newHeight)) 
     using (var graphics = Graphics.FromImage(newImage)) 
     { 
      graphics.SmoothingMode = SmoothingMode.AntiAlias; 
      graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; 
      graphics.PixelOffsetMode = PixelOffsetMode.HighQuality; 
      graphics.DrawImage(srcImage, new Rectangle(0, 0, newWidth, newHeight)); 
      newImage.Save(outputFile); 
     } 
    } 
} 
+0

Grazie Darin. Non voglio menzionare la larghezza e l'altezza nei numeri. Piuttosto saranno menzionati in percentuale. Per utilizzarlo dovrò (probabilmente) calcolare la larghezza dell'altezza delle immagini esistenti. – James

+0

Sì, è possibile farlo dopo aver caricato 'srcImage'. Tra la prima e la seconda istruzione 'using'. Puoi usare srcImage.Width e srcImage.Height per calcolare la nuova larghezza e il nuovo Hight passati al costruttore di Bitmap. –

+0

Ho aggiornato il mio post con un esempio. –

7

ho usato l'esempio fornito da Darin Dimitrov, L'immagine è stata gonfiata da e ha preso un sacco di spazio su disco (da 1,5 MB a 17 MB o giù di lì).

Ciò è dovuto a un piccolo errore nell'ultima riga di codice.

La funzione seguente salverà l'immagine come Bitmap (dimensione dell'immagine enorme).

newImage.Save(outputFile) 

La funzione corretta dovrebbe essere:

newImage.Save(outputFile, ImageFormat.Jpeg);