如何将StreamImageSource转换为byte []?

时间:2016-06-22 14:02:21

标签: c# xamarin xamarin.forms

我正在尝试将StreamImageSource转换为字节。 当我在日志中运行时,名为“imgPicked”的图像是StreamImageSource。我想把它转换成Byte [],但我不确定你是怎么做的。

这是我的代码:

private async void btnPickPicture_Clicked (object sender, EventArgs e)
{
    await cameraOps.SelectPicture ();
    var file = await cameraOps.SelectPicture();
    imgPicked.Source = ImageSource.FromStream(() => file.Source);

    System.Diagnostics.Debug.WriteLine (imgPicked.Source);
    //imgPicked is an StreamImageSource

}

如何将StreamImageSource(imgPicked)转换为byte []?

这是我在google搜索后到目前为止所拥有的内容:

byte[] data =  File.ReadAll(imgPicked.Source);

但我找不到“档案”。我是否错过了一个集会,或者作者没有提到“文件”继承的内容(参见链接):Is there a cross-platform solution to ImageSource to byte[]?

1 个答案:

答案 0 :(得分:0)

你没有。您无法将StreamImageSource转换为byte []。您可以使用源代码创建一个byte [],使用之前给出的代码。

await cameraOps.SelectPicture ();
var file = await cameraOps.SelectPicture();

// use the file.Source stream to create a StreamImageSource
imgPicked.Source = ImageSource.FromStream(() => file.Source);

// use the file.Source stream to create a byte[]
byte[] imgData = ReadStream(file.Source);

public byte[] ReadStream(Stream input)
    {
        byte[] buffer = new byte[16*1024];
        using (MemoryStream ms = new MemoryStream())
        {
            int read;
            while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
            {
                ms.Write(buffer, 0, read);
            }
            return ms.ToArray();
        }

    }