2010-06-17 87 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