[英]out of memory exception in image.fromFile(Stream)
我搜索了所有類似的問題,但仍然無法解決問題
這是服務器代碼,可以正常工作,如果我無法訪問圖像文件,則圖像文件創建成功,但是
圖片i = Image.FromStream(StreamObject);
注意:1-圖像不能太大2-圖像具有有效的圖像格式
我知道與流有關的問題...由於某些原因,我該如何控制此問題,我想在圖像對象中檢索保存的圖像。我如何在圖像的生命周期內保持流的打開狀態?
static void Main(string[] args)
{
IPAddress ipAdress = IPAddress.Parse("192.160.1.8");
// Initializes the Listener
TcpListener tcpListener = new TcpListener(ipAdress, 8001);
tcpListener.Start();
int no;
for (;;)
{
Socket socket = tcpListener.AcceptSocket();
if (socket.Connected)
{
Stream os = File.OpenWrite("Target.jpg",);
byte[] buffer = new byte[8000000];
NetworkStream networkStream = new NetworkStream(socket);
no = networkStream.Read(buffer, 0, 8000000);
os.Write(buffer, 0, no);
///here the problem in the following line
///
Image i = Image.FromFile("Target.jpg");
///
networkStream.Close();
socket.Close();
break;
}
}
}
盡管字節已寫入緩沖區,但字節可能尚未刷新到磁盤。 此外,提供的代碼示例在將文件讀入圖像時保持文件打開以進行寫入。 對於流之類的事物,應將用法包裝在using
語句中,以避免這些類型的內存錯誤。
static void Main(string[] args)
{
IPAddress ipAdress = IPAddress.Parse("192.160.1.8");
// Initializes the Listener
TcpListener tcpListener = new TcpListener(ipAdress, 8001);
tcpListener.Start();
int no;
for (;;)
{
Socket socket = tcpListener.AcceptSocket();
if (socket.Connected)
{
byte[] buffer = new byte[8000000];
using (Stream os = File.OpenWrite("Target.jpg"))
{
using (NetworkStream networkStream = new NetworkStream(socket))
{
no = networkStream.Read(buffer, 0, 8000000);
os.Write(buffer, 0, no);
}
}
///here the problem in the following line
///
Image i = Image.FromFile("Target.jpg");
///
socket.Close();
break;
}
}
}
另外,也許更合適,您應該考慮使用Image.FromStream
直接從流中創建GDI +圖像。 Image.FromStream
方法記錄在這里: https : Image.FromStream
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.