2013-06-01 3 views
0

Я преобразование моего изображения из PictureBox в массив байт, какConvertion faild из изображения в массив байт с использованием ImageConverter в C#

public static byte[] ImageToByte(Image img) 
    { 
     ImageConverter converter = new ImageConverter(); 
     return (byte[])converter.ConvertTo(img, typeof(byte[])); 
    } 

, а затем conveting массива байт изображения, как

public static Image byteArrayToImage(byte[] imageData) 
    { 
     try 
     { 
      Image image; 
      using (MemoryStream inStream = new MemoryStream()) 
      { 
       inStream.Write(imageData, 0, imageData.Length); 
       image = Bitmap.FromStream(inStream); 
      } 
      return image; 
     } 
     catch { throw; } 
    } 

Здесь для в первый раз перед тем, как я сохраню данные, я загружаю файл из локальной системы в коробку с картинками как

 openFileDialog1.Filter = "JPG Files (*.jpg)|*.jpg|JPEG Files (*.jpeg)|*.jpeg"; 
     if (openFileDialog1.ShowDialog() != DialogResult.Cancel) 
     { 

      Image pic = Image.FromFile(openFileDialog1.FileName); 
      pboxPhoto.Image = pic; 
     } 

Он работает на 100% в первый раз, когда я сохраняю данные в базе данных. Когда я извлекаю данные, я преобразовываю данные из возвращенного массива байтов в изображение и прикрепляюсь к picturebox. Все в порядке до сих пор. Теперь я хочу, чтобы обновить все записи, на этот раз ImagetoByte arrat метода бросает исключение, как

A generic error occurred in GDI+. 

Так моя проблема заключается когда я загрузить изображение из локальной системы преобразования, но когда я преобразовать массив байт Изображение, а затем попытайтесь преобразовать изображение в массив байтов, метод, выбрасывающий исключение. Спасибо.

+0

Как вы получаете изображение из коробки с картинками? – Jason

+0

Я вызываю метод как byte [] img = ImageToByte (pboxPhoto.Image); –

ответ

1

Проблема заключается в том, что вы закрываете базовый поток растрового изображения в byteArrayToImage, когда вы располагаете MemoryStream.

Вы не должны делать это с Bitmap.FromStream как замечаниями документации говорят

Вы должны сохранить поток открытым для всего срока службы изображения.

Image.FromFile ведет себя аналогичным образом, он сохраняет файл заблокированным до тех пор, пока изображение не будет расположено.

+0

хороший ..... спасибо soo много сэр .. –

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