Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
VS 2005 - Problema con PictureBox
giovedì 03 luglio 2008 - 16.18
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
AntCiar
Profilo
| Expert
936
messaggi | Data Invio:
gio 3 lug 2008 - 16:18
Salve a tutti.
Ho un problema con una PictureBox. provo a spiegare il tutto.
Ho un usercontrol principale chiamato ArticoloViewer. Questo usercontrol possiede vari bottoni. Ogni bottone ha associato un evento il quale aggiunge all'interno di un panel presente in ArticoloViewer un ulteriore usercontrol specifico.
Ad "ArticoloViewer" passo per riferimento un oggetto (che ciameremo OBJ) contenente varie informazioni. Ricevuto OBJ, "ArticoloViewer" a sua volta scorre i controlli presenti nel suo panel e passa ad ognuno (per riferimento) l'oggetto OBJ. Ogni controllo presente nel panel di "ArticoloViewer" preleva da OBJ le informazioni che gli interessano e le visualizza.
Uno di questi UserControl presenti nel panel di "ArticoloViewer" contiene una pictureBox. Da OBJ viene prelevato il percorso di una immagine e viene caricata nella PictureBox.
Fin qui tutto bene. Il problema sta nel fatto che se inizio a passare vari OBJ ad "ArticoloViewer", dopo un inprecisato numero di volte, nella picture box non vedo più l'immagine ma un rettangolo rosso con una X rossa che va da angolo ad angolo.
La cosa ancora più strana è che dopo l'apparizione della X rossa, se continuo a passare altri OBJ ad "ArticoloViewer", il metodo che carica la l'immagine nella PictureBox non da eccezione.
Secondo voi cosa succede? come si risolve?
Grazie
luigidibiasi
Profilo
| Guru
1.077
messaggi | Data Invio:
gio 3 lug 2008 - 16:27
Ciao,
>Il problema sta nel fatto che se inizio a passare vari OBJ ad "ArticoloViewer", dopo un inprecisato numero >di volte, nella picture box non vedo più l'immagine ma un rettangolo rosso con una X rossa che va da >angolo ad angolo.
Per imprecisato numero di volte forse intendi quando tenti di caricare un immagine già caricata? se si forse il problema sta nel fatto che utilizzi la image.fromFile per caricarti la foto...
Non vorrei dire cavolate ma credo di ricordare che il file rimane bloccato e non puoi cancellarlo, editarlo o caricarlo in un altra picturebox ( non ricordo come si fà per farlo rilasciare)
Per caricarti le immagini invece di image.fromFile prova ad utilizzare questa funzione
Public Function loadImageFromPath(ByVal thePath As String) As Bitmap
Try
Dim fileInfo As System.IO.FileInfo = New System.IO.FileInfo(thePath)
Dim fileStream As System.IO.FileStream = fileInfo.OpenRead()
Dim newsIco As Bitmap = Image.FromStream(fileStream)
fileStream.Close()
fileInfo = Nothing
Return newsIco
Catch
Return Nothing
End Try
End Function
Luigi Di Biasi
AntCiar
Profilo
| Expert
936
messaggi | Data Invio:
gio 3 lug 2008 - 16:45
Ciao Luigi.
Grazie per la tempestiva risposta.
Si, posso anche ricaricare più volte la stessa immagine. Il problema del rilascio sulla PictureBox si risolve in questo modo:
this.pictureBox1.Image = null;
this.pictureBox1.Image = Image.FromFile(path);
In questo modo quando fai "= null" ti sblocca il file precedentemente bloccato. il problema però non riguarda il blocco del file perchè se così fosse mi avrebbe dato un altro tipo di errore.
Ora faccio delle prove con la funzione che mi hai postato.
Grazie ancora
luigidibiasi
Profilo
| Guru
1.077
messaggi | Data Invio:
gio 3 lug 2008 - 17:03
Ciao,
in effetti impostare a null mi ha dato qualche problema di rilascio dell'immagine per questo ho pensato di postarti quella funzione. Spero ti sia utile ... fammi sapere come và eh ? :)
Luigi Di Biasi
AntCiar
Profilo
| Expert
936
messaggi | Data Invio:
gio 3 lug 2008 - 17:39
Ciao Luigi.
Sono riuscito a venirne fuori. Il problema era questo: le immagini caricate nella pictureBox provenivano da una funzione che le generava. Queste anche se avevano dimensione fisica di circa 300 Kb, avevano una dimensione in pixel di 8500 x 6500 (qualcosa di mostruoso!!!!). In questo caso anche con la tua funzione dopo un certo numero di caricamenti mi andava in errore dandomi finalmente una eccezzione di due parole: "Memoria Insufficiente".
Ho allora corretto la funzione che genera le immagini ed ora la dimensione in pixel è dell'ordine di 700 x 500 circa. In questo modo ho fatto varie prove e non mi va più in errore di "Memoria insufficiente".
Ti ringrazio lo stesso per la dritta sul caricamento tramite il fileStream.
Ciao
Cristian
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !