[英]What is the best way to create a realistic highlighter in .NET (using GDI+)?
如何使用GDI +在.NET中創建逼真的熒光筆(模擬現實世界的熒光筆)? 它用於圖形對象而不是可選文本。
使用透明刷(帶有alpha通道)不起作用,因為刷子所覆蓋區域下方的所有內容都“模糊”,我希望“前景”(主要是文本)保持清晰(保持顏色)。
僅將ColorMap用於背景區域可能會有效,但這需要大量代碼來確定背景區域和某個閾值(我可以從第一個像素或右上角像素中選擇背景)。
用於着色區域的ColorMatrix似乎也是一個選項,但我看到了與透明畫筆解決方案相同的問題(我不是ColorMatrices的專家,所以我可能忽略了一些東西)。
我想我需要前景色和背景色的動態閾值,但這可能會降低熒光筆的可用性。
我可以使用填充“選定”區域的解決方案或類似解決方案的刷子。
這篇文章討論了如何在GDI +中進行各種混合操作。 根據我的實驗,Darken或Multiply混合模式可以解決問題。
黃色高光讓黃光通過,同時阻擋其他光線。
在RGB顏色模型中,這意味着你讓紅色和綠色通過,而阻止藍色。
我們可以使用示例圖片來查看熒光筆(微軟的截圖工具)對頻道的影響:
原始圖片 :
突出顯示 :
色彩通道 :
因此,您需要做的是將blue
值設置為零,無論您希望突出顯示器出現在何處。
遺憾的是,沒有混合模式,圖像屬性或顏色矩陣,可用於僅繪制一個顏色分量。 在GDI +中實現這一目標的唯一方法是使用LockBits
。
我正在考慮一個給定寬度和高度的畫筆,當它被拖過屏幕區域時,抓住它下面的部分並分析它,將非文本顏色設置為黃色並僅保留文本顏色,然后放置更新部分回到屏幕上。 它應該相對快速和容易地做到這一點,但你必須擊中每個像素(並使用某種閾值來確定什么是文本,什么不是,如你所提到的)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.