2013-01-15 1 views
-3

То, что я пытаюсь сделать, это преобразовать изображение в массив байтов, а затем записать этот массив байтов в файл. вот кодОшибка при преобразовании jpg в gif с использованием Image.Save

public static byte[] Convert(Image img) 
    { 
     using (MemoryStream ms = new MemoryStream()) 
     { 
      img.Save(ms, System.Drawing.Imaging.ImageFormat.Gif); 
      // or whatever output format you like 
      return ms.ToArray(); 
     } 
    } 

    public Form1() 
    { 
     InitializeComponent(); 
     Bitmap pic = new Bitmap("tulips.jpg"); 
     pictureBox1.Image = pic; 
     byte[] img_array; 
     img_array = Convert(pic); 
     File.WriteAllBytes("test.txt", img_array); 

    } 

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

Однако, когда я пытаюсь написать массив в файл, а затем открыть файл, все, что я вижу, это мусор.

Я что-то упустил?

+0

Итак, вы _can_ напишите массив в файл. –

+1

«test.txt» - странное имя для изображения GIF. В DoubleClick в этом файле откроется Notepad, который не знает об изображениях. Попробуйте "test.gif". –

+0

, но это текстовый файл –

ответ

2

Ваш Bitmap является Image. Почему вы преобразовать его в byte массив, когда вы можете просто вызвать Save (документально here)

Bitmap pic = new Bitmap("tulips.jpg"); 
pictureBox1.Image = pic; 
pic.Save("test.gif", System.Drawing.Imaging.ImageFormat.Gif); 

Чтобы управлять изображением, вы обычно доступ к pixel data - то, что у вас есть теперь содержит заголовок типа файла, как а также пиксели! См. Bitmap.LockBits для управления пикселями (документально here)

+0

для управления изображением ... –

+0

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

+1

Обычно я пользуюсь Интернетом, редко книги, MSDN, Wikipedia и Google помогут вам, посмотрите http://en.wikipedia.org/wiki/Image_file_formats для получения дополнительной информации о форматах файлов – emartel

1

Вы уверены, что вы пытаетесь открыть файл с помощью средства просмотра изображений? Расширение .txt обычно заставляет его открываться текстовым редактором. Поскольку формат файла изображения двоичный, следует ожидать, что вы увидите только «мусор» при рендеринге его в виде текста. Это поможет, если вы используете правильное расширение, .gif, при сохранении файла.

File.WriteAllBytes("test.gif", img_array); 
+0

10-к-1 - это основная проблема. – JerKimball

+0

У меня есть delibrately сделал это .txt, так как я не открываю его с помощью блокнота. Когда я просматриваю массив байтов, он просто содержит числа. Почему эти числа не могут быть простыми в текстовом файле? –

+0

@WinCoder Вы знаете, что блокнот не может отображать изображение. – Paparazzi

1

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

Убедитесь, что вы сохраняете файл как соответствующий тип, а затем посмотрите, что произойдет.

+0

Я не понимаю. когда я проверяю массив байтов, он имеет простые номера, поэтому почему он может записывать числа в текстовый файл. –

+0

@WinCoder - это фактические байты. Когда вы записываете байты в файл, файл содержит эти байты. Если вы хотите преобразовать байты в строку, а затем записать это в текстовый файл, это другое. –