繁体   English   中英

在.NET中创建逼真的荧光笔(使用GDI +)的最佳方法是什么?

[英]What is the best way to create a realistic highlighter in .NET (using GDI+)?

如何使用GDI +在.NET中创建逼真的荧光笔(模拟现实世界的荧光笔)? 它用于图形对象而不是可选文本。

使用透明刷(带有alpha通道)不起作用,因为刷子所覆盖区域下方的所有内容都“模糊”,我希望“前景”(主要是文本)保持清晰(保持颜色)。

仅将ColorMap用于背景区域可能会有效,但这需要大量代码来确定背景区域和某个阈值(我可以从第一个像素或右上角像素中选择背景)。

用于着色区域的ColorMatrix似乎也是一个选项,但我看到了与透明画笔解决方案相同的问题(我不是ColorMatrices的专家,所以我可能忽略了一些东西)。

我想我需要前景色和背景色的动态阈值,但这可能会降低荧光笔的可用性。

我可以使用填充“选定”区域的解决方案或类似解决方案的刷子。

这篇文章讨论了如何在GDI +中进行各种混合操作。 根据我的实验,Darken或Multiply混合模式可以解决问题。

http://www.codeproject.com/KB/GDI-plus/KVImageProcess.aspx

黄色高光让黄光通过,同时阻挡其他光线。

在RGB颜色模型中,这意味着你让红色和绿色通过,而阻止蓝色。

我们可以使用示例图片来查看荧光笔(微软的截图工具)对频道的影响:

原始图片

在此输入图像描述

突出显示

在此输入图像描述

色彩通道

在此输入图像描述

因此,您需要做的是将blue值设置为零,无论您希望突出显示器出现在何处。

遗憾的是,没有混合模式,图像属性或颜色矩阵,可用于仅绘制一个颜色分量。 在GDI +中实现这一目标的唯一方法是使用LockBits

我正在考虑一个给定宽度和高度的画笔,当它被拖过屏幕区域时,抓住它下面的部分并分析它,将非文本颜色设置为黄色并仅保留文本颜色,然后放置更新部分回到屏幕上。 它应该相对快速和容易地做到这一点,但你必须击中每个像素(并使用某种阈值来确定什么是文本,什么不是,如你所提到的)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM