簡體   English   中英

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 : Image.FromStream

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM