2016-01-05 3 views
6

Sto provando a comprimere l'immagine scattata dalla fotocamera a 250kb in Xamarin.Forms. Ho trovato modi per farlo nel servizio di dipendenza, ma lo voglio senza servizio di dipendenza (codice xamarin.forms puro). Come potrebbe essere possibile. Qualcuno mi può suggerire i migliori approcci che hai?Comprime le dimensioni dell'immagine a 250kb utilizzando xamarin.forms senza servizio di dipendenza

Grazie in anticipo

+12

Non credo che ci sia un modo per farlo nel codice di forme "pure" a meno che non si voglia scrivere tutta la logica dell'immagine da zero, che sarebbe un'enorme quantità di codice. Affidarsi alle funzionalità di gestione delle immagini native altamente ottimizzate di ciascuna piattaforma sembra un modo migliore di procedere, anche se questo ti obbliga a utilizzare DI. – Jason

+0

Quando si seleziona il browser degli oggetti della libreria di riferimento .NET, viene visualizzata la libreria portatile System.Drawing. Come importare quella libreria? –

+1

system.drawing consente di utilizzare questa risposta. http://stackoverflow.com/a/24199315/5495701 – Slepz

risposta

12

E 'un lavoro molto complicato in quanto si avrebbe bisogno di un sacco di conoscenza circa l'elaborazione delle immagini.

Ancora più importante, reinventare la ruota è una brutta mossa.

http://www.codeproject.com/Articles/83225/A-Simple-JPEG-Encoder-in-C

Date un'occhiata del progetto codice di cui sopra che affronta solo JPEG; per non dire TIFF, GIF, BMP, ecc.

La compressione delle immagini coinvolge molte trasformazioni matematiche complesse, come DCT e Huffman.

Avrai bisogno di un intero semestre universitario per apprendere le nozioni di base.


D'altro canto, utilizzando saggiamente il supporto della piattaforma, è possibile completare l'operazione entro un minuto.

BitmapEncoder in Windows Phone.

FileStream stream = new FileStream("new.jpg", FileMode.Create); 
JpegBitmapEncoder encoder = new JpegBitmapEncoder(); 
encoder.QualityLevel = 30; 
encoder.Frames.Add(BitmapFrame.Create(image)); 
encoder.Save(stream); 

Bitmap in Android

using (System.IO.Stream stream = System.IO.File.Create(targetFile)) 
{ 
    bitmap.Compress(Bitmap.CompressFormat.Jpeg, 30, stream); 
} 

UIImage in iOS

NSData data = image.AsJPEG(0.3); 

Bitmap in .NET framework

ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders(); 
ImageCodecInfo codec = codecs.First(t => t.FormatID == ImageFormat.Jpeg.Guid); 
EncoderParameters parameters = new EncoderParameters(1); 
parameters.Param[0] = new EncoderParameter(Encoder.Quality, 30L); 
bitmap.Save("output.jpg", codec, parameters); 
+0

grazie! sembra esattamente quello di cui avevo bisogno – nicks

Problemi correlati