2009-05-21 12 views
1

Wie kann ich einen realistischen Textmarker (simuliert einen realen Textmarker) in .NET mit GDI + erstellen? Es soll auf einem Grafikobjekt verwendet werden, nicht auf auswählbarem Text.Was ist der beste Weg, um einen realistischen Highlighter in .NET (mit GDI +) zu erstellen?

Die Verwendung eines transparenten Pinsels (mit Alphakanal) funktioniert nicht, da alles unter dem vom Pinsel abgedeckten Bereich unscharf wird und ich möchte, dass der Vordergrund (meistens Text) frei bleibt es ist Farbe). Die Verwendung einer ColorMap für nur den Hintergrundbereich könnte funktionieren, aber dies würde eine Menge Code erfordern, um den Hintergrundbereich und einen bestimmten Schwellenwert zu bestimmen (ich könnte den Hintergrund aus dem ersten Pixel oder dem rechten oberen Pixel oder etwas auswählen).

Eine ColorMatrix zum Einfärben eines Bereichs scheint ebenfalls eine Option zu sein, aber ich sehe das gleiche Problem wie die transparente Pinsellösung (ich bin kein Experte für ColorMatrices, damit ich etwas übersehen kann).

Ich denke, ich brauche einen dynamischen Schwellenwert für die Vorder- und die Hintergrundfarbe, aber dies könnte die Verwendbarkeit des Textmarkers reduzieren.

Ich könnte mit einer Lösung leben, die einen "ausgewählten" Bereich oder eine pinselartige Lösung ausfüllt.

Antwort

1

Ein gelber highligher läßt Pass gelben Lichts, während der andere blockieren.

Im RGB-Farbmodell bedeutet dies, dass Sie Rot und Grün passieren lassen, während Sie blau blocken.

Wir können ein Beispielbild verwenden, um die Auswirkungen eines Highlighter (Microsoft Snipping Tool) auf den Kanälen zu sehen:

Originalbild:

enter image description here

Hervorgehoben:

enter image description here

Farbkanäle:

enter image description here

Also, was Sie den blue Wert auf Null gesetzt tun müssen, egal wo Sie Ihre Textmarker erscheinen soll.

Leider gibt es keine Füllmethode, Bildattribute oder Farbmatrix, die verwendet werden kann, um nur eine Farbkomponente zu zeichnen. Die einzige Möglichkeit, das in GDI + zu erreichen, ist die Verwendung von LockBits.

+1

Danke! Mit "LockBits" zur Manipulation der RGB-Werte "unter" macht der Cursor den Trick. – barry

0

Ich denke, dass ein Pinsel einer bestimmten Breite und Höhe, wenn es über einen Bereich des Bildschirms gezogen wird, den Abschnitt darunter und analysiert es, Nicht-Textfarbe auf gelb und Textfarbe allein gelassen wird und dann den aktualisierten Abschnitt wieder auf dem Bildschirm platzieren. Es sollte relativ schnell und einfach sein, dies zu tun, obwohl Sie jedes Pixel treffen müssen (und einen Schwellwert verwenden, um zu bestimmen, was Text ist und was nicht, wie Sie erwähnt haben).

Verwandte Themen