Zonen in ein Image zu bestimmen

15/01/2009 - 12:16 von Andrej Golubew | Report spam
Hallo zusammen,

es geht um folgendes:

Man hat ein Bild 600x360px. Auf diese Bild liegt eine Gitter so geteilt:

Auf X mit 150px Schritten
Auf Y mit 120px Schritten

D.h. es gibt die Zonen wie folgt:

Zone 1 X von 0 bis 150 und Y von 0 bis 120
Zone 2 X von 151 bis 300 und Y von 0 bis120

Zone 5 X von 0 bis 150 und Y von 121 bis 240
Zone 6 X von 151 bis 300 und Y von 121 bis 240

Wenn man auf Bild mit Maus klickt, bekomme ich Koordinaten.

Z.b. Klick hat geliefert Punkt (8;125), das ist Zone 5.

Man kann natürlich so machen:

If x > 0 and x <= 150 Then
If y > 0 and y <= 120 Then
stZone = 1
End If
End If

Und so für jede Bereich. Sieht aber irgendwie unprofessionell aus.

Hat jemand andere Ideen?

Vielen Dank
 

Lesen sie die antworten

#1 Armin Zingler
15/01/2009 - 13:14 | Warnen spam
Andrej Golubew wrote:
Hallo zusammen,

es geht um folgendes:

Man hat ein Bild 600x360px. Auf diese Bild liegt eine Gitter so
geteilt:

Auf X mit 150px Schritten
Auf Y mit 120px Schritten

D.h. es gibt die Zonen wie folgt:

Zone 1 X von 0 bis 150 und Y von 0 bis 120
Zone 2 X von 151 bis 300 und Y von 0 bis120

Zone 5 X von 0 bis 150 und Y von 121 bis 240
Zone 6 X von 151 bis 300 und Y von 121 bis 240

Wenn man auf Bild mit Maus klickt, bekomme ich Koordinaten.

Z.b. Klick hat geliefert Punkt (8;125), das ist Zone 5.

Man kann natürlich so machen:

If x > 0 and x <= 150 Then
If y > 0 and y <= 120 Then
stZone = 1
End If
End If

Und so für jede Bereich. Sieht aber irgendwie unprofessionell aus.

Hat jemand andere Ideen?



Wie wàr's mit dividieren und multiplizieren? ;-)


Private Shared Function GetZoneIndex( _
ByVal ZoneSize As Size, _
ByVal ZoneCountX As Integer, _
ByVal Position As Point) _
As Integer

Dim Col, Row As Integer

Row = Position.Y \ ZoneSize.Height
Col = Position.X \ ZoneSize.Width

Return Row * ZoneCountX + Col

End Function


Beispiel Aufruf:

Dim ZoneSize As New Size(150, 120)
Dim Cursorpos As Point

Cursorpos.X = 300
Cursorpos.Y = 240
Debug.Print(GetZoneIndex(ZoneSize, 4, Cursorpos).ToString)


Armin

Ähnliche fragen