2016-09-01 7 views
0

я искал по всей подобной проблеме, но до сих пор не могу решить проблемуиз исключения памяти в image.fromFile (Stream)

это код сервера он успешно работает и изображение Файл создан успешно, но если я не может получить доступ к файлу изображения

image i = Изображение.FromStream (StreamObject);

ПРИМЕЧАНИЕ: 1- изображения не слишком большое 2- образа иметь действительный формат изображение

Я знаю проблему, связанную с потоком ... Как я могу контролировать эту проблему я хочу retrive сохраненное изображение в объекте изображения по какой-то причине. Как я могу сохранить поток открытым для жизни изображения. ??

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; 

      } 
     } 

    } 

ответ

1

Хотя байты были записаны в буфер, байты, возможно, не были сброшены на диск. Кроме того, приведенный пример кода сохраняет файл открытым для записи, пока он считывается в изображение. Для таких вещей, как потоки, вы должны обернуть использование в операциях 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; 

     } 
    } 

} 

С другой стороны, и, вероятно, более уместно, следует рассмотреть вопрос о создании вашего GDI + изображения непосредственно из потока с помощью Image.FromStream. Метод Image.FromStream описан здесь: https://msdn.microsoft.com/en-us/library/system.drawing.image.fromstream%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

+0

Большое спасибо :) :) –

+0

Я использую FromFile(), потому что FromStream генерирует больше ошибок .. –

 Смежные вопросы

  • Нет связанных вопросов^_^