2016-04-22 2 views
0

Мне нужно преобразовать byte[] в Image, но я не могу заставить его работать на C#. Если бы я сохранить bytearray в файл, например так:C# ByteArray to Image

using (System.IO.FileStream fs = System.IO.File.Create("test.jpg")) 
{ 
    fs.Write(bytearray, 0, (int)lenght); 
    fs.Close(); 
} 

И test.jpg правильно показывает. Но когда я пытаюсь сделать изображение из bytearray следующим образом:

MemoryStream ms = new MemoryStream(bytearray); 
pictureBox1.Image = Image.FromStream(ms); 

Это показывает только черный ящик.

+0

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

+0

Не могли бы вы разместить весь код, который вы используете для загрузки изображения в PictureBox? – Ismael

+0

Im фактически делает изображение из массива перед сохранением в файл. 'code'test'code' – TomCrow

ответ

0

Я предполагаю, что одна проблема с тех пор, как вы создаете test.jpg, у нее нет никаких данных, и поэтому bytearray пуст.

ли что-то вроде: -

  byte[] fileData = null; 
      using (var fs = new FileStream("C:\\1\\roses.jpg", FileMode.Open, FileAccess.Read)) 
       { 
       var totalLength = (int)fs.Length; 
       using (var binaryReader = new BinaryReader(fs)) 
        { 
        fileData = new byte[totalLength]; 
        fs.Read(fileData, 0, totalLength); 
        fs.Close(); 
        } 
       MemoryStream ms = new MemoryStream(fileData); 
       pictureBox1.Image = Image.FromStream(ms); 
       } 
+0

OP говорит, что изображение сохраняет хорошо, но показывает черный ящик на форме. Поэтому я думаю, что есть данные в 'bytearray'. –

+0

Да, изображение экономит хорошо. Bytearray не пуст. – TomCrow

+0

Я видел, что если я пытаюсь прочитать файл .png, данные в bytearray не равны нулю. Но если я попытаюсь прочитать файл .jpg, то данные файла будут равны 0, поэтому последняя строка в моем коде вызывает исключение. Можете ли вы проверить, что вы получаете ненулевые данные в bytearray? Вы можете получить черный ящик из-за нулевых данных. Можете ли вы подтвердить содержимое массива байтов? – user2224280

0

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