You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin中如何将CameraView返回的ImageSource转为Byte[]或Stream

解决方案:利用MediaFile直接获取Stream/Byte[]

你遇到的核心问题是没注意到MediaCapturedEventArgs里除了Image(ImageSource类型),还提供了MediaFile属性——这才是获取原始图片数据的正确入口。

直接使用MediaFile转换为Byte[]或Stream

修改你的事件处理代码,通过MediaFile读取图片流并转换为需要的类型:

private async void cameraView_MediaCaptured(object sender, Xamarin.CommunityToolkit.UI.Views.MediaCapturedEventArgs e)
{
    // 保持原有显示图片的逻辑
    imageHolder.Source = e.Image;

    // 利用MediaFile获取图片流
    using (var stream = await e.MediaFile.OpenReadAsync())
    {
        // 转换为Byte[]
        byte[] imageBytes = new byte[stream.Length];
        await stream.ReadAsync(imageBytes, 0, (int)stream.Length);

        // 调用上传方法,传入Byte[]或者直接传入stream
        await fileContr.UploadFileAsync(imageBytes); 
        // 如果你的UploadFileAsync支持Stream,也可以直接传:await fileContr.UploadFileAsync(stream);
    }
}

关键说明

  • MediaFile是Xamarin.Forms提供的类型,它封装了拍摄后的原始图片文件,通过OpenReadAsync()可以获取文件的只读流,避免了从ImageSource反向解析的麻烦。
  • 用using语句包裹stream能确保资源被正确释放,避免内存泄漏。
  • 如果你的API支持直接上传流,直接传递stream会比转成Byte[]更节省内存。

内容的提问来源于stack exchange,提问作者ketamine6318

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 18:06:39