如何将Image转换为字符串最有效的方法?

时间:2011-08-19 08:25:23

标签: c# image byte streamreader memorystream

我想将图片文件转换为字符串。以下作品:

MemoryStream ms = new MemoryStream();

Image1.Save(ms, ImageFormat.Jpeg);

byte[] picture = ms.ToArray();
string formmattedPic = Convert.ToBase64String(picture);

但是,将其保存到XmlWriter时,它需要很长时间才能保存(26k图像文件为20秒)。有没有办法加快这一行动?

谢谢,

RAKS

1 个答案:

答案 0 :(得分:1)

有三点你不必要地进行大型操作:

  1. 获取流的字节
  2. 将其转换为Base64
  3. 将其写入XmlWriter。
  4. 相反。首先致电LengthGetBuffer。这让你直接对流的缓冲区进行操作。 (尽管先冲洗它。)

    然后,自己实现base-64。这是相对简单的,因为你采取3个字节的组,做一些bit-twiddling索引到它将被转换为的字符,然后输出该字符。最后,根据最后一个块发送的字节数添加一些=个符号(一个剩余字节为=,两个剩余字节为==,如果没有则为零部分区块)。

    将此写入char缓冲区(char [])。最有效的尺寸是实验的问题,但我从2048个字符开始。当您填充缓冲区时,请在其上调用XmlWriter.WriteRaw,然后再次开始在索引0处回写。

    通过这种方式,您可以减少分配,并且从将图像加载到内存流中的那一刻起就开始输出。通常,这应该会带来更好的吞吐量。