| |

VB.NET - FortgeschritteneRe: Farbe eines Pixels an der Mausposition ermitteln | |  | Autor: T.C.McQueen | Datum: 28.09.05 13:43 |
| Hi David,
dazu brauchst du erstmal einen Handle auf einen DeviceContext für den Desktop, den du mit der Win-API-Funktion "GetDC" aus bekommst.
Dann brauchst du die API "GetPixel" aus der gdi32 dll und die API DeleteDC.
Mit der GetDC Funktion bekommst du mit dem übergebenen Parameter 0 (null) für den Desktop, eine IntPtr-Variable zurück, die du mit dessen Methode ToInt32 in einen integer umwandeln kannst du dann mit GetPixel an den angegebenen Positionen die Pixelfarbe ebenfalls als integer-Variable zurückbekommst.
Das ganze als Code:
<DllImport("gdi32", CharSet:=CharSet.Ansi)> _
Public Shared Function DeleteDC(ByVal hdc As Integer) As Integer
<DllImport("user32", CharSet:=CharSet.Ansi)> _
Public Shared Function GetDC(ByVal hwnd As Integer) As IntPtr
<DllImport("gdi32", CharSet:=CharSet.Ansi)> _
Public Shared Function GetPixel(ByVal hdc As Integer, ByVal x As Integer, ByVal _
y As Integer) As Integer
Private dc as Integer
Private Sub ObtainDC()
Dim ptr1 As IntPtr = API.GetDC(0)
Me.dc = ptr1.ToInt32
End Sub
Private Sub FreeDC()
API.DeleteDC(Me._dc)
End Sub
Public Function ToColor(ByVal colVal As Integer) As Color
Return Color.FromArgb((colVal And 255), ((colVal And 65280) / 256), (( _
colVal And 16711680) / 65536))
End Function Zuerst rufst du wie gesagt die ObtainDC auf, um einen DeviceContext zu bekommen.
Dieser ist dann in der Variablen dc gespeichert.
Dann kannst du die API GetPixel aufrufen, der du dc und die Position übergibst.
Diese Funktion gibt dir dann einen integer-Wert zurück, in der die Werte R, G, B folgendermaßen als Bits kodiert sind:
XXXX BBBB GGGG RRRR
Mittels der Funktion ToColor kannst du dann den integer Wert als Color-Struktur umwandeln.
Zum Schluss solltest du mit FreeDC den DeviceContext wieder lösen.
Das war's
Gruß,
T.C.McQueen |  |
 | Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
  |
|
sevISDN 1.0 
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats Oktober 2025 Matthias KozlowskiUmlaute konvertierenErsetzt die Umlaute in einer Zeichenkette durch die entsprechenden Doppelbuchstaben (aus ä wird ae, usw.) Neu! sevEingabe 3.0 
Einfach stark!
Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. Weitere Infos
|
|
|
Copyright ©2000-2025 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|