Ecco un ancora più compatto pezzo di codice per il salvataggio in formato JPEG con una qualità specifica:
var encoder = ImageCodecInfo.GetImageEncoders().First(c => c.FormatID == ImageFormat.Jpeg.Guid);
var encParams = new EncoderParameters() { Param = new[] { new EncoderParameter(Encoder.Quality, 90L) } };
image.Save(path, encoder, encParams);
Oppure, se le linee larghe 120 caratteri sono troppo lunghi per voi:
var encoder = ImageCodecInfo.GetImageEncoders()
.First(c => c.FormatID == ImageFormat.Jpeg.Guid);
var encParams = new EncoderParameters(1);
encParams.Param[0] = new EncoderParameter(Encoder.Quality, 90L);
image.Save(path, encoder, encParams);
Assicurarsi che la qualità è un long
o si otterrà un ArgumentException
!
fonte
2015-03-23 13:51:35
che funziona. Sembrerebbe che senza tutto questo si utilizzi una qualità standard di 50 litri. – KdgDev
Hai un errore di battitura. jgpEncoder quando intendevi jpgEncoder;) –
EncoderParameter può utilizzare risorse non gestite e deve essere eliminato. La documentazione di Msdn è un po 'carente su questo argomento. Dovrebbe affermare che l'array 'Param' è inizializzato con elementi null (quindi nulla da eliminare prima del primo assegnamento a ciascun elemento), e che' EncoderParameters' dispone i propri parametri correnti sul proprio oggetto. –