B7. PictureBox e ProgressBar
PictureBox
La 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 : l'immagine visualizzata qualora non sia possibile caricare un'immagine con la proprietà Image
- Image : l'immagine visualizzata
- InitialImage : l'immagine visualizzata all'inizio, prima che sia impostata qualsiasi altra immagine con la proprietà Image
- SizeMode : modalità di ridimensionamento dell'immagine. Può assumere cinque valori: Normal (l'immagine rimane delle dimensioni normali, e ignora ogni ridimensionamento della picturebox: per questo può anche venire tagliata), StretchImage (l'immagine si ridimensiona a seconda della picturebox, assumendone le stesse dimensioni), AutoSize (la picturebox si ridimensiona sulla base dell'immagine contenuta), CenterImage (l'immagine viene sempre posta al centro della picturebox, ma mantiene le proprie dimensioni iniziali), Zoom (l'immagine si ridimensiona sulla base della picturebox, ma mantiene sempre lo stesso rapporto tra larghezza e altezza)
- Classe astratta Image
- FromFile(File) : carica un'immagine da File e ne restituisce un'istanza
- FromStream(Stream) : carica un'immagine dallo stream Stream e ne restituisce un'istanza (per ulteriori informazioni sugli stream, vedere capitolo 56)
- FromHbitmap : carica un'immagine a partire da un puntatore che punta al suo indirizzo in memoria
- HorizontalResolution : risoluzione sull'asse x, in pixels al pollice (=2.54cm)
- PixelsFormat : restituisce il formato dell'immagine, sottoforma di enumeratore
- RawFormat : restituisce il formato dell'immagine, in un oggetto ImageFormat
- RotateFlip(F) : ruota e/o inverte l'immagine secondo il formato F, esposto da un enumeratore codificato a bit
- Save(File) : salva l'immagine sul file File: l'estensione del file influenzerà il metodo di scrittura dell'immagine
- Size : dimensione dell'immagine
- VerticalResolution : risoluzione sull'asse y, in pixels al pollice
- Classe derivata Bitmap
- GetPixel(X, Y) : restituisce il colore del pixel alle coordinate (X, Y), riferite al margine superiore sinistro
- MakeTransparent(C) : rende il colore C trasparente su tutta l'immagine
- SetPixel(X, Y, C) : imposta il colore del pixel alle coordinate (X, Y) a C
- SetResolution(xR, yR) : imposta la risoluzione orizzontale su xR e quella verticale su yR, entrambe misurate in punti al pollice
ProgressBar
La ProgressBar è la classica barra di caricamento, usata per visualizzare sull'interfaccia lo stato di un'operazione. Le proprietà
principali sono poche:
- Maximum : il valore massimo rappresentabile dal controllo
- Minimum : il valore minimo rappresentabile dal controllo
- Step : valore che definisce il valore di incremento quando viene richiamata il metodo PerformStep
- Style : proprietà enumerata che indica lo stile della barra. Può assumere tra valori: Block (a blocchi), Continuos (i blocchi possono venire tagliati, a seconda delle percentuale) e Marquee (un blocchetto che si muove da sinistra a destra, che rappresenta quindi un'operazione in corso della quale non si sa lo stato)
- Value : il valore rappresentato
Esempio: Bianco e nero
L'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:
- Una PictureBox, imgPreview, ancorata a tutti i bordi, con SizeMode = StrecthImage
- Un Button, cmdLoad, Text = "Carica", Anchor = Left Or Bottom
- Un Button, cmdSave, Text = "Salva", Anchor = Bottom
- Un Button, cmdConvert, Text = "Converti", Anchor = Right Or Bottom
- Una ProgressBar, prgConvert, Style = Continuos
Bianco e nero
Ecco il codice:
Class Form1 'Funzione che converte un colore in scala di grigio Private Function ToGreyScale(ByVal CAs 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 RedAs Int32 = C.RDim GreenAs Int32 = C.GDim BlueAs Int32 = C.B 'Fa la media Dim GreyAs 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 senderAs System.Object, _ByVal eAs System.EventArgs)Handles cmdLoad.Click 'Per ulteriori informazioni sui controlli OpenFileDialog e 'SaveFileDialog vedere capitolo relativo Dim OpenAs New OpenFileDialog Open.Filter = "File immagine|*.jpg;*.jpeg;*.gif;*.png;*.bmp;" & _ "*.tif;*.tiff;*.emf;*.exif;*.wmf"If Open.ShowDialog = Windows.Forms.DialogResult.OKThen '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 senderAs System.Object, _ByVal eAs System.EventArgs)Handles cmdSave.Click 'Se c'è un'immagine da salvare, la salva If imgPreview.ImageIsNot Nothing Then Dim SaveAs 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.OKThen '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 senderAs System.Object, _ByVal eAs System.EventArgs)Handles cmdConvert.Click 'Prima si converte l'immagine in Bitmap, dato che Image 'è una classe astratta Dim ImageAs Bitmap = imgPreview.Image 'Variabile ausiliaria per i calcoli Dim TempColorAs 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 XAs Int32 = 0To Image.Width - 1 'Quindi ogni pixel nella riga For YAs Int32 = 0To 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 = ImageEnd Sub End Class
The Totem's Lair - Copyright (C) 2009
È vietata la riproduzione sia totale che parziale del sito.



