Vb.net Grundfarbe eines Bildes bestimmen

Moin moin,
hab ne schöne Aufgabe für Euch. Und zwar habe ich diverse Holzmuster als Bilder. Zur weiteren Verarbeitung benötige ich den Grundfarbton des Bildes, im Prinzip so was wie eine Spektralanalyse der Hauptfarbe. Beispiel: Graß ist grün, Himmel blau…
Format ist relativ egal, ARGB oder HTML, hauptsache ich kann es irgendwie weiterverarbeiten.

Bisher habe ich nur den Umweg über ein Fotoprogramm. Darin habe ich die Bilder total unscharf verwischt, so dass man praktisch nur noch eine Farbe sieht und danach hab ich mit einer Farbpipette den Farbton bestimmt. Den habe ich dann von Hand in eine Datei geschrieben, in der weitere Infos über das Bild stehen. Das ist mir aber viel zu aufwendig.

Hat jemand eine Idee?

Wenn deine bisherige Herangehensweise gut funktioniert hat und nur zu aufwendig war, warum programmierst du sie nicht einfach nach, ehe du nach fortgeschritteneren Lösungen suchst? Berechne den Farbdurchschnitt des gesamten Bildes und schau, ob das für deine Zwecke reicht.

In Pseudocode:
r=0, g=0, b=0
Für y = 1…h (Höhe des Bilds)
Für x = 1 … w (Breite des Bilds)
r = r + Bild(x,y).rot()
g = …
r = r / w*h
g = …

Berechne den Farbdurchschnitt des gesamten Bildes und schau,
ob das für deine Zwecke reicht.

Und noch mal mit Einrückungen:

r=0, g=0, b=0
Für y = 1...h (Höhe des Bilds)
 Für x = 1 .. w (Breite des Bilds)
 r = r + Bild(x,y).rot()
 g = ...
r = r / w\*h
g = ...

Jawoll, war gar nicht so schlimm. Danke für den Denkanstoß!

Zur Vollständigkeit hier noch die fertige Lösung:

 Private Function BitmapToColor(ByVal strFilename As String) As Color
 Dim dRed As Double = 0
 Dim dGreen As Double = 0
 Dim dBlue As Double = 0

 Dim myBitmap As New Bitmap(strFileName)

 For x As Integer = 1 To myBitmap.Width - 1 Step 32
 For y As Integer = 1 To myBitmap.Height - 1 Step 32
 dRed += myBitmap.GetPixel(x, y).R
 dGreen += myBitmap.GetPixel(x, y).G
 dBlue += myBitmap.GetPixel(x, y).B
 Next
 Next

 dRed = CType(dRed / (myBitmap.Width / 32 \* myBitmap.Height / 32), Integer)
 dGreen = CType(dGreen / (myBitmap.Width / 32 \* myBitmap.Height / 32), Integer)
 dBlue = CType(dBlue / (myBitmap.Width / 32 \* myBitmap.Height / 32), Integer)

 If dRed 255 Then dRed = 255
 If dGreen 255 Then dGreen = 255
 If dBlue 255 Then dBlue = 255

 Return Color.FromArgb(CInt(dRed), CInt(dGreen), CInt(dBlue))

 End Function

Hier frage ich allerdings nur jedes 32. Pixel je Zeile/Spalte ab, das reicht dicke und spart 1023 Rechenschritte.