在Windows Phone 7.1中将PNG图像转换为base64

时间:2013-01-09 10:55:27

标签: windows-phone-7 windows-phone-7.1

我想将路径中找到的PNG图像转换为Windows64中的html页面的base64。如何才能完成?

        Stream imgStream;
        imgStream =   Assembly.GetExecutingAssembly().GetManifestResourceStream("NewUIChanges.Htmlfile.round1.png");
        byte[] data = new byte[(int)imgStream.Length];
        int offset = 0;
        while (offset < data.Length)
        {
            int bytesRead = imgStream.Read(data, offset, data.Length - offset);
            if (bytesRead <= 0)
            {
                throw new EndOfStreamException("Stream wasn't as long as it claimed");
            }
            offset += bytesRead;
        }

1 个答案:

答案 0 :(得分:0)

它是一个PNG图像的事实实际上是无关紧要的 - 你需要知道的是你有一些字节需要转换成base64。

将流中的数据读入字节数组,然后使用Convert.ToBase64String。从流中读取字节数组可能会略显繁琐,具体取决于流是否通告其长度。如果是,您可以使用:

byte[] data = new byte[(int) stream.Length];
int offset = 0;
while (offset < data.Length)
{
    int bytesRead = stream.Read(data, offset, data.Length - offset);
    if (bytesRead <= 0)
    {
        throw new EndOfStreamException("Stream wasn't as long as it claimed");
    }
    offset += bytesRead;
}

如果没有,最简单的方法可能是将其复制到MemoryStream

using (MemoryStream ms = new MemoryStream())
{
    byte[] buffer = new byte[8 * 1024];
    int bytesRead;
    while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) > 0)
    {
        ms.Write(buffer, 0, bytesRead);
    }
    return ms.ToByteArray();
}

因此,一旦你使用这些代码(或其他任何合适的代码)来获取字节数组,只需使用Convert.ToBase64String就可以了。

可能存在流式解决方案,它们将避免将整个字节数组存储在内存中 - 例如尽可能地构建StringBuilder base64数据 - 但它们会更复杂。除非你打算处理非常大的文件,否则我会坚持使用上面的文件。