Scrivo un codice che legge un'immagine png dal file e mostra con controllo.
voglio leggere l'immagine dal flusso e impostareeccezione di memoria esaurita quando si utilizza control.BackgroundImage = Image.FromStream (memStream);
control.BackgroundImage = Image.FromStream(memStream);
ma quando l'uso di questo codice, si verificano "out of memory" eccezione. ma quando utilizzare
control.Image = Image.FromStream(memStream);
o
control.BackgroundImage = Image.FromFile(fileSource);
, che è il lavoro.
la dimensione del file immagine è 5 KB.
if (System.IO.File.Exists(imgSource))
{
using (FileStream localFileStream = new FileStream(imgSource, FileMode.Open))
{
using (MemoryStream memStream = new MemoryStream())
{
int bytesRead;
byte[] buffer = new byte[1024];
while ((bytesRead = localFileStream.Read(buffer, 0, buffer.Length)) > 0)
{
memStream.Write(buffer, 0, bytesRead);
}
retIMG = Image.FromStream(memStream);
pictureBox1.Image = retIMG; // is work
label1.Image = retIMG; // is work
button1.Image = retIMG; // is work
button1.BackgroundImage = retIMG; // don't work
groupBox1.BackgroundImage = retIMG; // don't work
panel1.BackgroundImage = retIMG; // don't work
}
}
}
Penso che un bug nel framework .NET. per favore mi aiuti?
Quale è il problema? Ti suggerisco di mettere prima l'immagine in una variabile, poi assegnarla alla seconda operazione. Quanto è grande l'immagine? La dimensione del file 5ggb può essere 50.000x50.000 pixel;) – TomTom
Le immagini riportano "Memoria insufficiente" per tutto ciò che va storto. –
Proprio come ha detto Henk, GDI + (e quindi 'System.Drawing') genera errori OutOfMemory in molti casi in cui non è effettivamente esaurito la memoria, come parametri non validi. Immagino che questo sia uno di quelli. – CodesInChaos