Guida al Visual Basic .NET
Capitolo 60° - PictureBox e ProgressBar
PictureBoxLa PictureBox è uno di quei controlli visibili solamente nel designer, poichè i suoi contorni, di default, sono invisibili. L'unica caratteristica che la rende visibile a runtime è la sua proprietà fondamentale, Image. Infatti, questo controllo può contenere un'immagine: di solito viene usata per posizionare loghi, banner o scritte all'interno dell'interfaccia di un programma. Le proprietà più importanti sono:
ErrorImage, Image e InitialImage sono proprietà di tipo Image: quest'ultima è una classe astratta e quindi non esiste mai veramente, anche se espone comunque dei metodi statici per il caricamento delle immagini. La classe che rappresenta veramente e materialmente l'immagine è System.Drawing.Bitmap, o solo Bitmap per gli amici. Nonostante il nome suggerisca diversamente, essa fa da wrapper a un numero elevato di formati di immagini, tra cui bmp, gif, jpg, png, exif, emf, tiff e wmf. In questo capitolo userò tale classe in modo molto particolare, quindi è meglio prima analizzarne i membri:
ProgressBarLa ProgressBar è la classica barra di caricamento, usata per visualizzare sull'interfaccia lo stato di un'operazione. Le proprietà principali sono poche:
Esempio: Bianco e neroL'esempio di questa lezione è un programma capace di caricare un'immagine, convertirla in bianco e nero, e poi risalvarla sullo stesso o su un altro file. I controlli da usare sono:
Disposti come in figura: Class Form1 'Funzione che converte un colore in scala di grigio Private Function ToGreyScale(ByVal C As Color) As Color 'Per convertire un colore in scala di grigio è sufficiente 'prendere le sue componenti di rosso, verde e blu (red, 'green e blue), farne la media aritmetica e quindi 'assegnare tale valore alle nuove coordinate RGB del 'colore risultante 'Ottiene le componenti (coordinate RGB) Dim Red As Int32 = C.R Dim Green As Int32 = C.G Dim Blue As Int32 = C.B 'Fa la media Dim Grey As Int32 = (Red + Green + Blue) / 3 'Quindi crea un nuovo colore, mettendo tutte le 'componenti uguali alla media ottenuta Return Color.FromArgb(Grey, Grey, Grey) End Function Private Sub cmdLoad_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles cmdLoad.Click 'Per ulteriori informazioni sui controlli OpenFileDialog e 'SaveFileDialog vedere capitolo relativo Dim Open As New OpenFileDialog Open.Filter = "File immagine|*.jpg;*.jpeg;*.gif;*.png;*.bmp;" & _ "*.tif;*.tiff;*.emf;*.exif;*.wmf" If Open.ShowDialog = Windows.Forms.DialogResult.OK Then 'Apre l'immagine, caricandola dal file selezionato 'nella finestra di dialogo tramite la funzione 'statica FromFile imgPreview.Image = Image.FromFile(Open.FileName) End If End Sub Private Sub cmdSave_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles cmdSave.Click 'Se c'è un'immagine da salvare, la salva If imgPreview.Image IsNot Nothing Then Dim Save As New SaveFileDialog Save.Filter = "File Jpeg|*.jpeg;*.jpg|File Bitmap|*.bmp|" & _ "File Png|*.png|File Gif|*.gif|File Tif|*.tif;" & _ "*.tiff|File Wmf|*.wmf|File Emf|*.emf" If Save.ShowDialog = Windows.Forms.DialogResult.OK Then 'Dato che la proprietà Image è di tipo Image, usa 'il metodo statico Save per salvare l'immagine imgPreview.Image.Save(Save.FileName) End If End If End Sub Private Sub cmdConvert_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles cmdConvert.Click 'Prima si converte l'immagine in Bitmap, dato che Image 'è una classe astratta Dim Image As Bitmap = imgPreview.Image 'Variabile ausiliaria per i calcoli Dim TempColor As Color 'Attenzione! 'Alcuni formati non supportano SetPixel, come il formato 'Gif. Controllare di passare immagini di formato adeguato 'Itera su ogni pixel, e lo cambia di colore 'Scorre le righe di pixel una alla volta For X As Int32 = 0 To Image.Width - 1 'Quindi ogni pixel nella riga For Y As Int32 = 0 To Image.Height - 1 'Converte il colore TempColor = Image.GetPixel(X, Y) TempColor = ToGreyScale(TempColor) Image.SetPixel(X, Y, TempColor) Next 'Imposta il valore della progressbar su una percentuale 'che esprime il numero di righe analizzate prgConvert.Value = X * 100 / Image.Width 'Evita di bloccare il programma. Per ulteriori 'informazioni su Application e il namespace My, 'vedere capitolo relativo Application.DoEvents() Next 'Reimposta l'immagine finale imgPreview.Image = Image End Sub End Class
C#, TypeScript, java, php, EcmaScript (JavaScript), Spring, Hibernate, React, SASS/LESS, jade, python, scikit, node.js, redux, postgres, keras, kubernetes, docker, hexo, etc...
|