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

Xamarin应用开发:如何获取可编辑像素的图片?

Xamarin获取图片用于像素级编辑的方法

要实现像素级编辑,你需要将MediaPicker获取的流转换成可直接操作像素的位图对象。跨平台场景下推荐使用SkiaSharp(专门针对.NET的2D图形库,完美支持Xamarin),步骤如下:

1. 安装SkiaSharp依赖

先通过NuGet安装对应包:

  • 对于Xamarin.Forms项目,安装 SkiaSharp.Views.Forms
  • 原生项目可安装 SkiaSharp

2. 将图片流转换为可编辑的位图

修改你的现有代码,把读取到的流解码为SKBitmap,这是SkiaSharp中用于像素操作的核心对象:

var result = await MediaPicker.PickPhotoAsync(new MediaPickerOptions()
{
    Title = "Выберите изображение" //Eng: Pick image
});

var stream = await result.OpenReadAsync();

// 解码流为SKBitmap,用于像素编辑
using var editableBitmap = SKBitmap.Decode(stream);

3. 像素级操作示例

拿到editableBitmap后,就可以直接读写像素了:

  • 获取像素颜色:
    // 获取坐标(x,y)处的像素颜色
    SKColor pixelColor = editableBitmap.GetPixel(100, 100);
    
  • 修改像素颜色:
    // 将坐标(x,y)处的像素设置为红色
    editableBitmap.SetPixel(100, 100, new SKColor(255, 0, 0));
    
  • 批量操作可遍历位图的宽高(editableBitmap.Width、editableBitmap.Height),逐个处理像素。

4. 将修改后的位图回显到控件

编辑完成后,把SKBitmap重新编码为流,再设置给Image控件:

using var modifiedStream = new MemoryStream();
// 编码为PNG格式(也可选择JPG,调整第二个参数为质量值0-100)
editableBitmap.Encode(modifiedStream, SKEncodedImageFormat.Png, 100);
modifiedStream.Position = 0;

image.Source = ImageSource.FromStream(() => modifiedStream);

注意事项

  • 用using语句包裹SKBitmap和流,确保资源及时释放,避免内存泄漏
  • 如果是Xamarin.Forms项目,确保在App.xaml.cs的OnStart方法中初始化SkiaSharp(部分旧版本需要):SKCanvasView.Init();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 12:45:32