1

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

使用透明画笔(带 alpha 通道)无法完成这项工作,因为画笔覆盖区域下方的所有内容都变得“模糊”,我希望“前景”(主要是文本)保持清晰(保持颜色)。

仅对背景区域使用 ColorMap 可以工作,但这需要大量代码来确定背景区域和某个阈值(我可以从第一个像素或右上角像素或其他东西中选择背景)。

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

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

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

4

3 回答 3

3

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

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

于 2009-05-21T03:58:43.580 回答
1

黄色荧光笔让黄光通过,同时阻挡其他光。

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

我们可以使用示例图片来查看荧光笔(Microsoft 的 Snipping Tool)对通道的影响:

原始图像

在此处输入图像描述

突出显示

在此处输入图像描述

颜色通道

在此处输入图像描述

因此,您需要做的是将blue值设置为零,无论您希望荧光笔出现在哪里。

不幸的是,没有混合模式、图像属性或颜色矩阵可用于仅绘制一种颜色分量。在 GDI+ 中实现这一点的唯一方法是使用LockBits.

于 2013-12-09T19:09:28.737 回答
0

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

于 2009-05-21T03:54:23.073 回答