VS 2005 - Problema con PictureBox

giovedì 03 luglio 2008 - 16.18

AntCiar Profilo | Expert

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

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

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

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

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
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 !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5