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

Xamarin.Forms拍照上传后Xamarin.Forms.Image转System.Drawing.Image问题

Xamarin.Forms拍照上传并服务端转System.Drawing.Image解决方案

一、移动端Xamarin侧正确获取照片字节流

  • 首先明确:Xam.Plugin.Media拍照返回的是MediaFile类型实例,不是直接Xamarin.Forms.Image,不要先转成Image控件再转字节流,避免篡改原始图片编码导致服务端识别失败
  • 拍照后直接从MediaFile读取原始流转字节数组上传即可,参考代码:
// 拍照核心逻辑
var photo = await CrossMedia.Current.TakePhotoAsync(new StoreCameraMediaOptions
{
    SaveToAlbum = false,
    CompressionQuality = 80 // 可自定义压缩质量,取值范围0-100
});

if (photo == null) return;

// 直接转字节数组,跳过Xamarin.Forms.Image转换步骤
byte[] imageBytes;
using (var stream = photo.GetStream())
using (var ms = new MemoryStream())
{
    stream.CopyTo(ms);
    imageBytes = ms.ToArray();
}

// 此处直接将imageBytes上传至服务端即可

二、服务端字节流转System.Drawing.Image

  • 若服务端部署在Windows环境,直接安装System.Drawing.CommonNuGet包后用以下代码转换:
// 服务端接收字节数组后的转换逻辑
public System.Drawing.Image BytesToImage(byte[] imageBytes)
{
    using(var ms = new MemoryStream(imageBytes))
    {
        return System.Drawing.Image.FromStream(ms);
    }
}
  • 若服务端部署在Linux/macOS环境,System.Drawing.Common从.NET 6开始仅支持Windows,可替换为跨平台图像处理库如ImageSharp,直接从字节数组加载图片即可,逻辑与上述代码类似

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:39:02