2010-06-17 27 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; 

編輯:解決的辦法是 - 使用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?這是你自己編寫的代碼嗎? – 2010-06-17 20:05:06

+0

轉換爲'byte []'時,是否使用相同的編碼,寫入和讀取文件? – Oded 2010-06-17 20:07:15

回答

2

是的,這是有可能得到完全無損存儲。如果您只是將其存儲爲原始BMP格式,則不會有任何問題。我假設你將它轉換爲文本,因爲你想通過一些協議發送它,其中二進制字符將被破壞。

而不是你在做什麼,你可以考慮使用Convert.ToBase64String

+0

是的。 Base64解決了這個問題。 – Lijo 2010-06-18 12:19:42

1

我還沒有任何問題,這個片段...試試吧...如果你得到好的結果,那麼問題是在你的圖像 - >字節[]或字節[] - >圖像代碼:)

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