Alessandro Del Sole's Blog

{ A programming space about Microsoft® .NET® }
posts - 1909, comments - 2047, trackbacks - 352

My Links

News

Your host

This is me! Questo spazio è dedicato a Microsoft® .NET®, di cui sono molto appassionato :-)

Cookie e Privacy

Disabilita cookie ShinyStat

Microsoft MVP

My MVP Profile

Microsoft Certified Professional

Microsoft Specialist

Xamarin Certified Mobile Developer

Il mio libro su VB 2015!

Pre-ordina il mio libro su VB 2015 Pre-ordina il mio libro "Visual Basic 2015 Unleashed". Clicca sulla copertina per informazioni!

Il mio libro su WPF 4.5.1!

Clicca sulla copertina per informazioni! E' uscito il mio libro "Programmare con WPF 4.5.1". Clicca sulla copertina per informazioni!

These postings are provided 'AS IS' for entertainment purposes only with absolutely no warranty expressed or implied and confer no rights.
If you're not an Italian user, please visit my English blog

Le vostre visite

I'm a VB!

Guarda la mia intervista a Seattle

Follow me on Twitter!

Altri spazi

GitHub
I miei progetti open-source su GitHub

Article Categories

Archives

Post Categories

Image Galleries

Privacy Policy

WPF: caricare e salvare immagini a runtime

Per la serie a volte ritornano , riprendiamo in mano WPF. Ma in realtà non l'ho mai abbandonato, anzi ci lavoro quotidianamente ma il libro su LightSwitch mi sta prendendo totalmente e come vedete anche il numero dei miei post si è ridotto.

Bando alle ciance, tornando al titolo del post, può capitare e non di rado la necessità di caricare un'immagine (foto, disegno...) a runtime in un'applicazione WPF, affinchè sia associata a un controllo Image. Mentre assegnare la proprietà Source da XAML è banale, non è lo stesso da code-behind. In sostanza, non basta dire:

Image1.Source = "Qualcosa.jpg"

Per caricare un'immagine è infatti necessario ricorrere alla classe BitmapImage, che va popolata con uno stream che punta al file, in questo modo:

            Using fs As New FileStream("NomeFile.jpg", FileMode.Open)
               Dim img As New BitmapImage()
               img.BeginInit()
               img.StreamSource = fs
               img.EndInit()
 
               Me.Image1.Source = img
               img = Nothing

             End Using

I formati supportati sono i più diffusi, quindi Jpeg, Bmp, Gif, Png, Tif. Se la nostra immagine viene ritoccata e vogliamo salvarla su disco, il procedimento è quello di convertire Image.Source in una BitmapImage e poi utilizzare un apposito Encoder a seconda del formato che ci interessa. Il seguente codice salva l'immagine in formato Png:

            Dim bitmap As BitmapImage = DirectCast(Me.Image1.Source, BitmapImage)
            Dim encoder As New PngBitmapEncoder()
            encoder.Frames.Add(BitmapFrame.Create(bitmap))
            Using pngImage As New System.IO.FileStream("NomeFile.png", System.IO.FileMode.Create)
                encoder.Save(pngImage)
            End Using

Ci sono vari encoder ognuno per lo specifico formato, tutti ereditano da System.Windows.Media.Imaging.BitmapEncoder. Il link vi elencherà tutti gli encoder disponibili, diciamo che a fattor comune l'istanza di un encoder ha una proprietà Frames che va popolata con uno snapshot dell'immagine creato tramite il metodo statico BitmapFrame.Create. L'eccezione è chiaramente il formato Tiff che invece supporta più frame.

Alessandro

Print | posted on lunedì 19 settembre 2011 23:58 | Filed Under [ Visual Basic Windows Presentation Foundation ]

Powered by:
Powered By Subtext Powered By ASP.NET