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

如何在Xamarin Forms中实现仅给用户截图添加水印的功能

Xamarin.Forms 截图自动加水印实现方案

这个需求完全可以实现,核心逻辑是双平台分别监听系统截图事件,在内存中对原始截图叠加水印后替换原文件,全程不会在应用正常界面渲染任何水印元素,不影响用户正常使用。

前置权限要求

  • Android:Android 13及以上需申请READ_MEDIA_IMAGES权限,低版本申请READ_EXTERNAL_STORAGE、WRITE_EXTERNAL_STORAGE权限
  • iOS:需在Info.plist中配置相册访问权限说明NSPhotoLibraryAddUsageDescription、NSPhotoLibraryUsageDescription

各平台实现思路

Android 端实现

  1. 注册内容观察者监听媒体库更新事件,过滤路径包含screenshot、截屏关键词的新增文件,确认是用户生成的截图
  2. 读取原始截图文件转成Bitmap,调用Canvas API叠加文字/图片水印,示例代码:
public Bitmap AddWatermark(Bitmap originalBitmap, string watermarkText)
{
    var outputBitmap = Bitmap.CreateBitmap(originalBitmap.Width, originalBitmap.Height, originalBitmap.GetConfig());
    var canvas = new Canvas(outputBitmap);
    // 绘制原始截图
    canvas.DrawBitmap(originalBitmap, 0, 0, null);
    // 配置水印画笔
    var paint = new Paint
    {
        Color = Android.Graphics.Color.ParseColor("#80FFFFFF"),
        TextSize = 80,
        AntiAlias = true
    };
    // 绘制水印,可自定义位置、样式
    canvas.DrawText(watermarkText, 100, originalBitmap.Height - 200, paint);
    return outputBitmap;
}
  1. 将加好水印的Bitmap覆盖原截图文件,或插入媒体库替换原始截图即可

iOS 端实现

  1. 注册系统通知UIApplication.UserDidTakeScreenshotNotification监听截图完成事件
  2. 读取相册最新生成的截图,调用CoreGraphics API叠加水印,示例代码:
public UIImage AddWatermark(UIImage originalImage, string watermarkText)
{
    UIGraphics.BeginImageContextWithOptions(originalImage.Size, false, 0);
    // 绘制原始截图
    originalImage.Draw(new CGRect(0, 0, originalImage.Size.Width, originalImage.Size.Height));
    // 配置水印属性
    var textAttributes = new UIStringAttributes
    {
        Font = UIFont.SystemFontOfSize(40),
        ForegroundColor = UIColor.White.ColorWithAlpha(0.5f)
    };
    // 绘制水印
    watermarkText.DrawString(new CGRect(100, originalImage.Size.Height - 200, originalImage.Size.Width - 200, 100), textAttributes);
    var outputImage = UIGraphics.GetImageFromCurrentImageContext();
    UIGraphics.EndImageContext();
    return outputImage;
}
  1. 将加好水印的图片替换相册中原截图即可

Xamarin.Forms 层统一调用

通过DependencyService封装双平台的监听、水印处理服务,在共享层统一调用即可,可统一配置水印内容、位置、透明度等参数,适配不同业务需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 08:39:04