0

我想将在 Windows phone7.1 中的 html 页面路径中找到的 PNG 图像转换为 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;
        }
4

1 回答 1

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

可能有一些流式解决方案可以避免将整个字节数组放在内存中——例如,建立一个StringBuilderbase64数据——但它们会更复杂。除非你要处理非常大的文件,否则我会坚持上面的。

于 2013-01-09T10:58:48.187 回答