2010-06-17 3 views
2

Я преобразовываю изображения в массив байтов и сохраняю их в текстовом файле, используя следующий код. Я тоже получаю их.C# - Байт-массив высокого качества Преобразование изображений

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

Пожалуйста, поделитесь своими мыслями.

string plaintextStoringLocation = @"D:\ImageSource\Cha5.txt"; 
    string bmpSourceLocation = @"D:\ImageSource\Cha50.bmp"; 

    ////Read image 
    Image sourceImg = Image.FromFile(bmpSourceLocation); 

    ////Convert to Byte[] 
    byte[] clearByteArray = ImageToByteArray(sourceImg); 


    ////Store it for future use (in plain text form) 
    StoreToLocation(clearByteArray, plaintextStoringLocation); 

    //Read from binary 
    byte[] retirevedImageBytes = ReadByteArrayFromFile(plaintextStoringLocation); 

    //Retrieve from Byte[] 
    Image destinationImg = ByteArrayToImage(retirevedImageBytes); 

    //Display Image 
    pictureBox1.Image = destinationImg; 

EDIT: А решение - использовать Base64

  //Plain Text Storing Location 
      string plaintextStoringLocation = @"D:\ImageSource\GirlInflower23.txt"; 
      string bmpSourceLocation = @"D:\ImageSource\GirlInflower1.bmp"; 

      ////Read image 
      Image sourceImg = Image.FromFile(bmpSourceLocation); 


      string base64StringOfIMage = ImageToBase64(sourceImg, ImageFormat.Bmp); 

      byte[] byteOfString = Convert.FromBase64String(base64StringOfIMage); 


      StoreToLocation(byteOfString, plaintextStoringLocation); 

      byte[] retrievedBytesForStrimngForImage = ReadByteArrayFromFile(plaintextStoringLocation); 


      MemoryStream memStream = new MemoryStream(retrievedBytesForStrimngForImage); 
      //memStream.Read(); 

      Image retrievedImg = Image.FromStream(memStream); 
      pictureBox1.Image = retrievedImg; 
+1

Что такое ImageToByteArray, ReadByteArrayFromFile и ByteArrayToImage? Этот код вы написали сами? –

+0

Используете ли вы такую ​​же кодировку при преобразовании в 'byte []', записываете и читаете из файла? – Oded

ответ

2

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

Вместо того, что вы делаете, вы можете использовать Convert.ToBase64String.

+0

Да. Это проблема Base64, которая решает проблему. – Lijo

1

У меня не было никаких проблем с этим фрагментом ... попробуйте ... если вы получите хорошие результаты, то проблема в вашем изображении -> byte [] или байт [] -> Код изображения :)

Image srcImage; 
Image destImage; 

// load an image 
srcImage = Image.FromFile(filename); 

// save the image via stream -> byte[] 
using(MemoryStream stream = new MemoryStream()){ 
    image.Save(stream, ImageFormat.xxx); 
    byte[] saveArray = stream.ToArray(); 
    /*..... strore saveArray......*/ 
} 

// rehydrate 
byte[] loadArray = /*...get byte array from storage...*/ 

using(MemoryStream stream = new MemeoryStream(loadArray)){ 
    destImage = Image.FromStream(stream); 
} 

pictureBox.Image = dstImage; 

// don't forget...dispose of any Image/Stream objects 
Смежные вопросы