vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Grafik und Font · Sonstiges   |   VB-Versionen: VB4, VB5, VB601.03.04
Point-Funktion für das Image-Control

Das Image-Control verfügt im Gegensatz zum Picturebox-Control über keine Point-Funktion. Mit ein wenig API-Einsatz läßt sich dieser Umstand beheben.

Autor:   ZardozBewertung:  Views:  13.628 
ohne HomepageSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Das Image-Control verfügt im Gegensatz zum Picturebox-Control über keine Point-Funktion, mit der man den Farbwert eines bestimmten Pixels auslesen kann.
Mit ein wenig API-Einsatz läßt sich dieser Umstand jedoch beheben.

Zunächst die benötigten API-Deklarationen:

Option Explicit
 
' Benötigte API-Deklarationen
Private Declare Function CreateCompatibleDC Lib "gdi32" ( _
  ByVal hdc As Long) As Long
 
Private Declare Function SelectObject Lib "gdi32" ( _
  ByVal hdc As Long, _
  ByVal hObject As Long) As Long
 
Private Declare Function GetPixel Lib "gdi32" ( _
  ByVal hdc As Long, _
  ByVal X As Long, _
  ByVal Y As Long) As Long
 
Private Declare Function DeleteDC Lib "gdi32" ( _
  ByVal hdc As Long) As Long

Und hier die Funktion:

Private Function PointImage&(Img As Image, _
  X As Single, Y As Single)
 
  Dim XPx AS long
  Dim YPx As long
  Dim Imghdc As Long
  Dim OldHnd As Long
 
  ' Umwandeln der Koordinaten in Pixel
  XPx = Me.ScaleX(X, Me.ScaleMode, vbPixels)
  YPx = Me.ScaleY(Y, Me.ScaleMode, vbPixels)
 
  ' Generieren eines DeviceContext (DC)
  Imghdc = CreateCompatibleDC(Me.hdc)
 
  ' Image-Bild dem DC zuordnen
  OldHnd = SelectObject(Imghdc, Img.Picture.Handle)
 
  ' Pixelfarbe auslesen
  PointImage = GetPixel(Imghdc, XPx, YPx)
 
  ' DC wieder den alten Handle zuordnen
  SelectObject Imghdc, OldHnd
 
  ' DC löschen
  DeleteDC Imghdc
End Function

Ein Beispiel:
Benötigt werden: Ein Image-Control mit Bild und ein Label

Private Sub Image1_MouseMove(Button As Integer, Shift As Integer, _
  X As Single, Y As Single)
 
  Dim nRed As Integer
  Dim nGreen As Integer
  Dim nBlue As Integer
  Dim nColor As Long
 
  ' Farbe des Image-Controls auslesen
  nColor = PointImage(Image1, X, Y)
 
  ' Farbe in RGB zerlegen
  nRed = nColor And &HFF
  nGreen = (nColor \ &H100) And &HFF
  nBlue = (nColor \ &H10000) And &HFF
 
  ' Farbwerte im Label ausgeben
  Label1.AutoSize = True
  Label1.Caption = "Rot = " & CStr(nRed)& vbCr & _
    "Grün = " & CStr(nGreen) & vbCr & _
    "Blau = " & CStr(nBlue)
End Sub

Anmerkung:
Wenn die Stretch-Eigenschaft des Image-Controls auf True festgelegt ist, müssen die X- und die Y-Koordinate vor dem Aufruf durch den Vergrößerungsfaktor geteilt werden. Dieser Faktor für die X-Koordinate ist das Verhältnis der Breite der Image ohne Rahmen, zur Breite des Originalbildes.
 



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle 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.