我想将图片文件转换为字符串。以下作品:
MemoryStream ms = new MemoryStream();
Image1.Save(ms, ImageFormat.Jpeg);
byte[] picture = ms.ToArray();
string formmattedPic = Convert.ToBase64String(picture);
但是,将其保存到XmlWriter时,它需要很长时间才能保存(26k图像文件为20秒)。有没有办法加快这一行动?
谢谢,
RAKS
答案 0 :(得分:1)
有三点你不必要地进行大型操作:
相反。首先致电Length
和GetBuffer
。这让你直接对流的缓冲区进行操作。 (尽管先冲洗它。)
然后,自己实现base-64。这是相对简单的,因为你采取3个字节的组,做一些bit-twiddling索引到它将被转换为的字符,然后输出该字符。最后,根据最后一个块发送的字节数添加一些=
个符号(一个剩余字节为=
,两个剩余字节为==
,如果没有则为零部分区块)。
将此写入char缓冲区(char [])。最有效的尺寸是实验的问题,但我从2048个字符开始。当您填充缓冲区时,请在其上调用XmlWriter.WriteRaw
,然后再次开始在索引0处回写。
通过这种方式,您可以减少分配,并且从将图像加载到内存流中的那一刻起就开始输出。通常,这应该会带来更好的吞吐量。