image.fromFile(Stream) 内存不足异常
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://msdn.microsoft.com/en-us/library/system.drawing.image.fromstream%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396
我搜索了所有类似的问题,但仍然无法解决问题
这是一个服务器代码,它工作成功并且图像文件创建成功但是如果我无法访问图像文件
图像 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://msdn.microsoft.com/en-us/library/system.drawing.image.fromstream%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396