【问题标题】:C# - High Quality Byte Array Conversion of ImagesC# - 图像的高质量字节数组转换
【发布时间】:2010-06-17 20:01:00
【问题描述】:

我正在使用以下代码将图像转换为字节数组并存储在文本文件中。我也在成功检索它们。

我担心检索到的图像质量达不到预期。有没有办法更好地转换为字节数组和检索?我不担心空间概念。

请分享你的想法。

    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;

【问题讨论】:

  • 什么是 ImageToByteArray、ReadByteArrayFromFile 和 ByteArrayToImage?这段代码是你自己写的吗?
  • 在转换为byte[]、写入和读取文件时是否使用相同的编码?

标签: c#


【解决方案1】:

是的,可以获得完全无损的存储。如果您只是将其存储为原始 BMP 格式,则不会有任何问题。我假设您正在将其转换为文本,因为您想通过某些二进制字符会被破坏的协议发送它。

您可以考虑使用Convert.ToBase64String,而不是您正在做的任何事情。

【讨论】:

    【解决方案2】:

    我对这个片段没有任何问题...试试看...如果你得到了很好的结果,那么问题出在你的 Image -> byte[] 或 byte[] -> Image code :)

    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 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-30
      • 1970-01-01
      • 2015-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多