将Stream转换为byte []数组始终在Windows Phone 8 C#中返回0长度

时间:2015-04-19 11:14:04

标签: c# windows-phone-8 stream

我从PhotoResult photoChooserTask_Completed(object sender, PhotoResult e)事件处理程序收到了一个Stream。

e.ChosenPhoto本身就是一个Stream,所以我将其分配给Stream stream。然后我使用下面的方法将它转换为byte []数组:

    public static byte[] ReadImageFile2(Stream mystream)
    {
        // The mystream.length is still full here.
        byte[] imageData = null;
        using (BinaryReader br = new BinaryReader(mystream))
        {
            imageData = br.ReadBytes(Convert.ToInt32(mystream.Length));
        }
        // But imageData.length is 0
        return imageData;
    }

我不知道BinaryReader有什么问题,只返回长度为0的imageData。试图将类型转换为br.ReadBytes((int)mystream.Length),但仍无效。

还尝试了Creating a byte array from a stream中的所有答案,但仍无效。也许我的e.ChosenPhoto不能用作普通的流。

谢谢。

1 个答案:

答案 0 :(得分:9)

根据docs,您可能必须在阅读之前将流的位置设置为0:

using (BinaryReader br = new BinaryReader(mystream))
{
    mystream.Position = 0;
    imageData = br.ReadBytes(Convert.ToInt32(mystream.Length));
}