2015-01-27 4 views
0

Следующий метод выдает это исключениеReadTimeout исключение с MemoryStream

System.IO.Stream) (мс)). ReadTimeout бросили исключение типа System.InvalidOperationException»

Это является метод:

private static byte[] ImageToByteArraybyMemoryStream(Bitmap bmp) 
{ 
    using (MemoryStream ms = new MemoryStream()) { 
     bmp.Save(ms, bmp.RawFormat);   
     return ms.ToArray(); 
    } 
} 

Однако эта ошибка не возникает постоянно. Я постараюсь объяснить вкратце, что происходит:

  • загружает растровое изображение из файла, отобразить его и хранить его в Dictionary<int,Bitmap>
  • При закрытии приложения, я пишу растровое приложения конфиг-файл в качестве byte[] (и нет не исключение)
  • на старте приложения я загрузить растровое изображение из конфигурационного-файла и отобразить его
  • Когда пользователь изменяет приложения-данные (например, изменение размера или перемещение растрового изображения) я переписать конфигурационный-файл такой же, как я сделал, когда битмап был загружен из файла, и это Исключение составляет.
+0

, при которой называют в этом методе исключение? Можете ли вы опубликовать все Исключение и Stacktrace? – BoeseB

+0

Вы преобразовали массив байтов в любой строковый формат, прежде чем записывать его в файле конфигурации? –

+0

@BoeseB в строке bmp.save (..) фактическое сообщение является общим gdi + error – aw48

ответ

0

Я просто искал «общие ошибки gdi +», другие также столкнулись с проблемой bmp.Save Method. обходным путем для них является создание нового растрового изображения из того, который вы хотите сохранить, а затем сохраните эту копию.

... 
Bitmap copy = new Bitmap(bmp); 
copy.Save(ms, copy.RawfFormat); 
... 

Может быть, это работает для вас, я не могу сказать вам причину этой ошибки, ее обозначаемая как ошибки на других сайтах.

Other Post discussing this Problem

+0

, но почему он работает один раз? просто попробовал ImageConverter вместо memystream, и он тоже сработает. – aw48

+0

Мое предположение - это первый раз, когда вы читаете образ из файла изображения. Во втором старте вы читаете его из своего конфигурационного файла. Когда вы читаете его из своего конфигурационного файла, может быть, что некоторые ресурсы не освобождены правильно, и поэтому метод save не работает. Или, сохраняя и загружая bytearray как rawbytes в текстовом файле, в загруженном bytearray есть ошибки, которые вызывают сбой метода сохранения, но не вызывают ошибок при отображении. Все просто угадывая ... – BoeseB

+0

вы сохранили мой проект !!! после того, как вы вернетесь к исходному bmp.Save (ms, System.Drawing.Imaging.ImageFormat.Bmp), ваше предложение копирует работу. – aw48

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