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

如何在Xamarin.Forms中使用Bitmap?无需平台特定实现或自定义渲染器

在Xamarin.Forms中替代Android Bitmap的无平台代码方案

当然可以!不用自定义渲染器或平台特定代码,在Xamarin.Forms里完全能实现类似Android Bitmap的图像处理功能,我整理了几个实用的可行方案:

方案1:使用SkiaSharp(推荐,功能最全面)

SkiaSharp是谷歌Skia图形库的.NET绑定,Xamarin.Forms官方对它有很好的支持,完全跨平台,能覆盖几乎所有Android Bitmap的使用场景。

  • 第一步:在你的Xamarin.Forms项目中安装SkiaSharp.Views.Forms NuGet包
  • 用SKBitmap替代Android的Bitmap,它支持加载、裁剪、缩放、像素操作、滤镜等所有常见功能,示例代码:
// 加载本地图片到SKBitmap
var originalBitmap = SKBitmap.Decode("assets/image.png");

// 裁剪出100x100的区域
var croppedBitmap = new SKBitmap(100, 100);
using (var canvas = new SKCanvas(croppedBitmap))
{
    // 从原图的左上角开始裁剪100x100的区域,绘制到新Bitmap中
    canvas.DrawBitmap(originalBitmap, new SKRect(0, 0, 100, 100), new SKRect(0, 0, 100, 100));
}

// 将处理后的SKBitmap转换为Xamarin.Forms的ImageSource,显示到Image控件
yourImageControl.Source = SKImage.FromBitmap(croppedBitmap).ToImageSource();
  • 你还可以用它做更复杂的操作,比如给图片加文字水印、应用高斯模糊滤镜、修改像素颜色等等,完全不需要平台代码。

方案2:利用FFImageLoading(快速实现常见处理)

FFImageLoading是一款成熟的图片加载与处理库,内置了很多常用的图像处理转换,上手简单,不需要自己写复杂的图形代码。

  • 第一步:安装FFImageLoading.Forms NuGet包
  • 通过它的Transformations API实现裁剪、缩放、圆角、灰度化等操作,示例:
// 加载本地图片并进行裁剪+降采样处理
var processedImageSource = await ImageService.Instance
    .LoadFile("assets/image.png")
    .Crop(150, 150) // 裁剪为150x150
    .DownSample(width: 300) // 降采样到宽度300
    .AsImageSourceAsync();

// 绑定到Image控件
yourImageControl.Source = processedImageSource;
  • 它还自带图片缓存、占位图加载失败占位等实用功能,适合快速实现需求。

方案3:使用System.Drawing.Common(简单场景适用)

如果你的需求只是基础的图片加载、缩放、格式转换,那么可以用.NET的System.Drawing.Common库,它在Xamarin.Forms中也能跨平台使用(.NET 6+版本支持)。

  • 第一步:安装System.Drawing.Common NuGet包
  • 示例代码:
using (var fileStream = File.OpenRead("assets/image.png"))
{
    // 从流加载图片
    using (var originalImage = System.Drawing.Image.FromStream(fileStream))
    {
        // 缩放图片到200x200
        var scaledImage = new System.Drawing.Bitmap(originalImage, new System.Drawing.Size(200, 200));
        
        // 转换为MemoryStream,设置给Image控件
        using (var memoryStream = new MemoryStream())
        {
            scaledImage.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Png);
            memoryStream.Position = 0;
            yourImageControl.Source = ImageSource.FromStream(() => memoryStream);
        }
    }
}
  • 注意:这个库的图形处理能力不如SkiaSharp,适合简单场景,复杂操作还是优先选SkiaSharp。

以上三个方案都完全不需要编写自定义渲染器或任何平台特定代码,全部基于Xamarin.Forms和跨平台NuGet包实现。其中SkiaSharp的灵活性和功能完整性最高,能完美替代Android Bitmap的绝大多数使用场景,推荐优先考虑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:08:19