0

パスで見つかったPNG画像をWindowsphone7.1の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;
        }
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(またはその他の適切なもの)を使用してバイト配列を取得したら、使用するだけで済みます。

おそらく、バイト配列全体をメモリに保存することを回避するストリーミングソリューションがあります(たとえばStringBuilder、base64データを積み上げるなど)が、より複雑になります。非常に大きなファイルを扱う場合を除いて、私は上記に固執します。

于 2013-01-09T10:58:48.187 に答える