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

在Mono.Android与Xamarin.iOS中使用System.Drawing.Common遇阻求助

解决System.Drawing.Common在Mono.Android/Xamarin.iOS项目中的问题

核心原因先搞清楚

从.NET Core 3.0版本开始,System.Drawing.Common就被官方标记为仅支持Windows平台。NuGet包里只包含适配Windows桌面框架的二进制文件,没有针对Android、iOS移动平台的实现。所以你在Mono.Android或Xamarin.iOS项目里安装这个包后,项目根本识别不到有效引用,自然看不到组件、调用不了System.Drawing.Bitmap类。


针对你的问题的具体解决方案

1. 替代System.Drawing.Bitmap的可行方案

既然官方不支持移动平台,就得换用适配环境的图形处理方案,这里有两个靠谱方向:

  • 用平台原生API(推荐,性能最优)

    • Android平台:直接使用Android系统提供的Android.Graphics.Bitmap类,它完全适配Android环境,能实现加载、裁剪、缩放、像素操作等所有你需要的图形功能,和System.Drawing.Bitmap的能力对齐。
    • iOS平台:使用iOS原生的UIKit.UIImage和CoreGraphics.CGImage组合,这是iOS系统原生的图形处理组件,满足日常图片操作需求毫无问题。
  • 用跨平台图形库(如果需要跨多平台复用代码)
    推荐使用SkiaSharp,这是谷歌Skia图形引擎的.NET绑定,支持Windows、Android、iOS、macOS等几乎所有主流平台,API设计和System.Drawing非常接近,迁移成本低,而且是微软官方推荐的跨平台图形解决方案。比如替换System.Drawing.Bitmap的话,你可以用SkiaSharp.SKBitmap:

    using SkiaSharp;
    
    // 加载图片示例
    var skBitmap = SKBitmap.Decode("your_image_path.png");
    // 后续的裁剪、缩放等操作逻辑,和System.Drawing的用法高度相似
    

2. 关于NuGet包引用不显示的问题

你检查包文件夹会发现,System.Drawing.Common的NuGet包里只有针对netcoreapp3.0+、net5.0-windows这类Windows相关框架的dll,完全没有Android(monoandroid)或iOS(xamarinios)的目标框架文件。所以项目安装包后,找不到适配当前平台的引用,自然不会在引用列表里显示,也没法调用任何类。

如果实在想尝试(不推荐生产环境),可以安装System.Drawing.Common 2.x版本的旧包——那个版本还没限制平台支持,但旧版本已经停止维护,可能存在兼容性和安全性问题,谨慎使用。


内容的提问来源于stack exchange,提问作者leo.luo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:56:46