Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1928to1932
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Pixelfarbe auslesen

Pixelfarbe auslesen
02.05.2023 15:02:43
Frank

Hallo an Alle,

ich versuche gerade aus einem Bild die Pixelfarbe auszulesen. Wenn ich Getpixel schreibe und dann Klammer auf, verlangt VBA als erstes ein hdc Wert von mir. Da ich nicht genau weiß was das sein soll, habe ich nach etwas ähnlichem gesucht und .Picture.hPal eingegeben. Jetzt wird mit immer -1 ausgegeben. Kann mir bitte jemand helfen wie ich den Farbwert auslese? Genauso verhält es sich mit SetPixel. Auf einer Seite im Internet steht hdc Legt den Gerätekontext (Device-Kontext) fest, z.B. Picture.hDC.

Kann man bitte jemand erläutern wie ich diese beiden Funktionen korrekt ansteuere?

Declare PtrSafe Function GetPixel Lib "gdi32" ( _
ByVal hdc As LongPtr, _
ByVal x As Long, _
ByVal y As Long) As Long
Declare PtrSafe Function SetPixel Lib "gdi32" ( _
ByVal hdc As LongPtr, _
ByVal x As Long, _
ByVal y As Long, _
ByVal crColor As Long) As Long

Private Sub Test()
  Dim I, J As Long
  Dim Pixelfarbe
  
  With UserForm1.Image1
    .PictureSizeMode = fmPictureSizeModeStretch
 
    ' Invertiert eine Grafik
    For I = 0 To .Width
      For J = 0 To .Height
        Pixelfarbe = GetPixel(.Picture.hPal, I, J)
        'Setpixel(15, i ,j)
      Next J
    Next I
  End With
End Sub


Vielen Dank und viele Grüße
Frank

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Pixelfarbe auslesen
02.05.2023 16:50:39
Frank
Hallo ralf_b,

vielen Dank. Wenn ich das in mein Testmakro übernehme, dann steht da Methode oder Datenobjekt nicht gefunden.

Private Sub Test()
  Dim I, J As Long
  Dim Pixelfarbe
  Dim rgbVal As Long  ' RGB color of the pixel
Dim hBrush As Long  ' handle to the brush we'll create
'Dim winrect As RECT  ' rectangle of Form1
Dim retval As Long  ' return value

' Determine the color of the pixel on Form1 at (75,100).
rgbVal = GetPixel(UserForm1.hdc, 75, 100)

End sub
Oder liegt es daran, dass ich Windows 10 verwende? Geht der Code bei dir? Auch die Definition "As Rect" geht nicht...


Anzeige
AW: Pixelfarbe auslesen
02.05.2023 17:34:19
Nepumuk
Hallo Frank,

so geht das:

Option Explicit

Private Declare PtrSafe Function GetPixel Lib "gdi32.dll" ( _
    ByVal hdc As LongPtr, _
    ByVal x As Long, _
    ByVal y As Long) As Long
Private Declare PtrSafe Function GetDC Lib "user32.dll" ( _
    ByVal hwnd As LongPtr) As LongPtr
Private Declare PtrSafe Function FindWindowA Lib "user32.dll" ( _
    ByVal lpClassName As String, _
    ByVal lpWindowName As String) As LongPtr

Private Const GC_CLASSNAMEUSERFORM As String = "ThunderDFrame"

Private Sub UserForm_Click()
    Dim lngptrHwnd As LongPtr, lngptrDC As LongPtr
    Dim lngReturn As Long
    lngptrHwnd = FindWindowA(GC_CLASSNAMEUSERFORM, Caption)
    lngptrDC = GetDC(lngptrHwnd)
    lngReturn = GetPixel(lngptrDC, 10, 10)
End Sub
Gruß
Nepumuk


Anzeige
AW: Pixelfarbe auslesen
02.05.2023 19:19:52
Frank
Guten Abend Nepumuk,

vielen lieben Dank für deine Mühen bzw. dem Code. Das hätte ich so nicht hinbekommen. Genau das habe ich gesucht.

Ich wünsche dir noch einen schönen Abend. Danke. Danke. Danke. :-)

Frank

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige