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

MAUI中Clipboard类仅支持文本,如何获取剪贴板图片?

在MAUI中从剪贴板获取图片的实现方案

MAUI内置的Clipboard类仅支持文本操作,要获取剪贴板中的图片,必须通过平台特定代码实现(不同平台的剪贴板API逻辑差异较大)。以下是各平台的具体实现步骤和代码示例:

Android平台实现

  1. 在Platforms/Android目录下创建ClipboardImageHelper.cs类:
using Android.Content;
using Android.Graphics;
using Android.OS;
using Android.Content.ClipboardManager;
using Android.Content.ClipData;
using Android.Net;

namespace YourAppName.Platforms.Android;

public static class ClipboardImageHelper
{
    public static async Task<Bitmap?> GetClipboardImageAsync()
    {
        var clipboardManager = (ClipboardManager)Android.App.Application.Context.GetSystemService(Context.ClipboardService);
        if (clipboardManager == null || !clipboardManager.HasPrimaryClip)
            return null;

        var clipData = clipboardManager.PrimaryClip;
        if (clipData == null || clipData.ItemCount == 0)
            return null;

        var clipItem = clipData.GetItemAt(0);
        var uri = clipItem.Uri;
        if (uri == null)
            return null;

        try
        {
            using var inputStream = Android.App.Application.Context.ContentResolver.OpenInputStream(uri);
            return await BitmapFactory.DecodeStreamAsync(inputStream);
        }
        catch
        {
            return null;
        }
    }
}
  1. 在AndroidManifest.xml中添加必要权限:
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" android:maxSdkVersion="33" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
<uses-permission android:name="android.permission.READ_CLIPBOARD_IN_BACKGROUND" />

iOS平台实现

在Platforms/iOS目录下创建ClipboardImageHelper.cs类:

using UIKit;

namespace YourAppName.Platforms.iOS;

public static class ClipboardImageHelper
{
    public static async Task<UIImage?> GetClipboardImageAsync()
    {
        var pasteboard = UIPasteboard.General;
        if (pasteboard.HasImages)
        {
            return pasteboard.Image;
        }
        return null;
    }
}

Windows平台实现

在Platforms/Windows目录下创建ClipboardImageHelper.cs类:

using Windows.ApplicationModel.DataTransfer;
using Windows.Storage.Streams;
using Microsoft.UI.Xaml.Media.Imaging;

namespace YourAppName.Platforms.Windows;

public static class ClipboardImageHelper
{
    public static async Task<BitmapImage?> GetClipboardImageAsync()
    {
        var dataPackageView = Clipboard.GetContent();
        if (!dataPackageView.Contains(StandardDataFormats.Bitmap))
            return null;

        var bitmapStream = await dataPackageView.GetBitmapAsync();
        var bitmapImage = new BitmapImage();
        await bitmapImage.SetSourceAsync(bitmapStream);
        return bitmapImage;
    }
}

共享代码统一调用

在共享项目中创建跨平台调用的服务类ClipboardService.cs:

using YourAppName.Platforms.Android;
using YourAppName.Platforms.iOS;
using YourAppName.Platforms.Windows;

namespace YourAppName;

public static class ClipboardService
{
    public static async Task<object?> GetClipboardImageAsync()
    {
#if ANDROID
        return await ClipboardImageHelper.GetClipboardImageAsync();
#elif IOS
        return await ClipboardImageHelper.GetClipboardImageAsync();
#elif WINDOWS
        return await ClipboardImageHelper.GetClipboardImageAsync();
#else
        return null;
#endif
    }
}

页面中调用示例

假设你有一个MAUI的Image控件(命名为imageControl),可以这样获取并显示剪贴板图片:

var clipboardImage = await ClipboardService.GetClipboardImageAsync();

#if ANDROID
if (clipboardImage is Android.Graphics.Bitmap bitmap)
{
    imageControl.Source = ImageSource.FromStream(() =>
    {
        var stream = new MemoryStream();
        bitmap.Compress(Android.Graphics.Bitmap.CompressFormat.Png, 100, stream);
        stream.Position = 0;
        return stream;
    });
}
#elif IOS
if (clipboardImage is UIKit.UIImage uiImage)
{
    imageControl.Source = ImageSource.FromStream(() => uiImage.AsPNG().AsStream());
}
#elif WINDOWS
if (clipboardImage is Microsoft.UI.Xaml.Media.Imaging.BitmapImage winBitmap)
{
    imageControl.Source = ImageSource.FromUri(winBitmap.UriSource);
}
#endif

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 05:05:16