检测剪贴板上的任何图像

Detect any image on clipboard(检测剪贴板上的任何图像)
本文介绍了检测剪贴板上的任何图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

现在,我想防止用户将带有任何类型图像的任何内容粘贴到富文本框中。Clipboard.ContainsImage不起作用,因为它只检测某些类型,如果剪贴板包含图像文本,则不会检测到它。 我需要的是一种方法来检测文本中的图像,单独的图像,多个图像...在剪贴板内,以便能够在发生这种情况时清除剪贴板。我需要避免这些大量内容才能到达数据库...

谢谢

推荐答案

问题不仅仅是阻止图像,因为rtf可以嵌入任何对象,包括Word文档或任意二进制数据。

我能想到的只有3个选项

  1. 限制您允许保存到数据库的最大数据大小,此时低于该大小的图像不会有问题,因为它在允许的大小内。

  2. 使用允许您解析和理解RTF内容的库,以便您可以检查除标准文本和格式之外的任何内容。然后,您可以去掉任何嵌入的二进制对象。或者,您可以处理WM_Paste并检查剪贴板中的RTF文本。如果它有RTF文本,你可以解析它,并在粘贴时而不是保存时剥离嵌入的对象。如果它没有RTF版本,请不要忘记检查它是否有纯文本版本。

  3. 拦截并处理WM_Paste消息,并使用RichTextBox.Paste(DateFormats)控制可以粘贴哪些数据类型。然后,您可以将其限制为仅将数据的纯文本版本粘贴到剪贴板上,该剪贴板不能包含嵌入的对象。此处的缺点是用户无法粘贴来自其他应用程序的格式化文本,所有格式都将丢失。

1是最简单的,但接受用户将能够嵌入小图像和其他小对象(如Word文档或视频),只要它低于最大大小。

2比较复杂,但提供了最佳的用户体验。

3比2简单,但提供的用户体验很差,就好像您不关心格式化文本就不会使用富文本框一样。除非您只需要纯文本并且使用的是其较大的文本容量,但如果是这种情况,您将只获取纯文本版本以保存到不包含图像的数据库中。

这篇关于检测剪贴板上的任何图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

DispatcherQueue null when trying to update Ui property in ViewModel(尝试更新ViewModel中的Ui属性时DispatcherQueue为空)
Drawing over all windows on multiple monitors(在多个监视器上绘制所有窗口)
Programmatically show the desktop(以编程方式显示桌面)
c# Generic Setlt;Tgt; implementation to access objects by type(按类型访问对象的C#泛型集实现)
InvalidOperationException When using Context Injection in ASP.Net Core(在ASP.NET核心中使用上下文注入时发生InvalidOperationException)
LINQ many-to-many relationship, how to write a correct WHERE clause?(LINQ多对多关系,如何写一个正确的WHERE子句?)