so hab das jetzt endlich geschafft. wenn auch über Umwege
nun hab ich aber das Problem, das es sehr lange dauert.
22sec
muss es in weniger als einer sec schaffen
wie könnt ich das verbessern?
hier mal mein kompletter Code vom Programm:
Public Class Form1
Dim XButton As Integer
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles MyBase.Load
End Sub
Private Sub cmdCamStart_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles cmdCamStart.Click
If XButton = 0 Then
videoHandle = Camera_Deklaration.CreateCaptureWindow( _
picturebox1.Handle) 'Cam starten und Bild in picturebox1 ausgeben
cmdCamStart.Text = "Cam stoppen"
XButton = 1
cmdSave.Enabled = True
cmdBildtoArray.Enabled = True
cmdBildtoMatrix.Enabled = True
Else
Disconnect(videoHandle)
cmdCamStart.Text = "Cam starten"
XButton = 0
cmdSave.Enabled = False
cmdBildtoArray.Enabled = False
cmdBildtoMatrix.Enabled = False
End If
End Sub
Private Function vbPixels() As Object
Throw New NotImplementedException
End Function
Private Sub cmdBildtoMatrix_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles cmdBildtoMatrix.Click
Dim image1 As Bitmap 'Image eins als Variable vom Typ Bild
' erzeugen
Dim matrix(320, 240, 1, 1, 1) As Long
Dim px, py, x, y, Max, Min, PR, PG, PB As Integer _
'Variablen für Koordinaten der Pixel definieren
Dim bs As New BindingSource
Dim mX, mY As Integer
Dim StartZeit As Date
Dim StopZeit As Date
StartZeit = DateTime.Now
image1 = CapturePicture(videoHandle) 'Aktuelles Bild der Kamera der
' Variable image1 zuordnen
'DataGridView mit Matrix Füllen
DataGridView1.Columns.Add("X", "X") 'DataGridView Spalten erstellen
DataGridView1.Columns.Add("Y", "Y")
DataGridView1.Columns.Add("H", "H")
DataGridView1.Columns.Add("S", "S")
DataGridView1.Columns.Add("V", "V")
For x = 0 To image1.Width - 1 'Schleife durch die Pixel
For y = 0 To image1.Height - 1
Dim pixelColor As Color = image1.GetPixel(x, y)
' Dim newColor As Color = Color.FromArgb(255, pixelColor.R,
' pixelColor.G, 250) 'Farbe des Aktuellen Pixels _
verändern pixelcolor.R = PixelFarbe Rot übernehmen
PR = pixelColor.R 'RGB Werte den Variablen zuordnen
PG = pixelColor.G
PB = pixelColor.B
If PR > PG And PR > PB Then 'Maximalwert von RGB
' herausfinden und in Variable Max schreiben
Max = PR
ElseIf PG > PR And PG > PB Then
Max = PG
Else
Max = PB
End If
If PR < PG And PR < PB Then 'Minimalwert von RGB
' herausfinden und in Variable Min schreiben
Min = PR
ElseIf PG < PR And PG < PB Then
Min = PG
Else
Min = PB
End If
If Max = Min Or PR = PG = PB Then 'H wert errechnen
h1 = 0
Else
If Max = PR Then
h1 = 60 * (0 + (PG - PB) / (Max - Min))
ElseIf Max = PG Then
h1 = 60 * (2 + (PB - PR) / (Max - Min))
Else
h1 = 60 * (4 + (PR - PG) / (Max - Min))
End If
End If
If Max = 0 Or PR = PG = PB = 0 Then 'S Wert errechnen
s1 = 0
Else
s1 = (Max - Min) / Max
End If
v1 = Max 'V Ist = dem Maximal wert
matrix(x, y, 0, 0, 1) = h1 'HSV Werte in Matrix schreiben
matrix(x, y, 0, 1, 1) = s1
matrix(x, y, 1, 1, 1) = v1
mX = x
mY = y
DataGridView1.Rows.Add(mX, mY, h1, s1, v1) 'Werte in
' DataGridView einlesen
Next
Next
StopZeit = DateTime.Now
Label1.Text = CStr(DateDiff(DateInterval.Second, StartZeit, StopZeit)) _
& " Sekunden"
End Sub
End Class |