簡體   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