Koordinaten berechnen

Übersicht Sonstiges Smalltalk

Neue Antwort erstellen

Farbfinsternis

Betreff: Koordinaten berechnen

BeitragDi, Apr 03, 2007 14:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry Leute, ich habe gerade eine Denksperre bei folgendem Problem, welches wahrscheinlich total simpel zu lösen ist. Ich komme leider gerade nicht drauf.

Folgendes: Ich habe ein Bild das in ein Raster aufgeteilt ist
user posted image

Ich kenne die Breite und Höhe des Bildes sowie die Breite und Höhe der einzelnen Kästchen ... wie kann ich nun zu jeder Nummer die linke/obere Koordinate in Pixeln ausrechnen??

Danke schonmal für hilfreiche Tipps Very Happy
Farbfinsternis.tv

FOODy

BeitragDi, Apr 03, 2007 14:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Meinst du es so in der Richtung?
Code: [AUSKLAPPEN]
SuperStrict
Framework BRL.GLMax2D

Const Width:Int=32
Const Height:Int=32
Const OffsetX:Int = 64
Const OffsetY:Int = 64

Graphics 480,320

Local Mx:Int=0
Local My:Int=1

Repeat
   Cls
      ' Zeichnen
      For Local y:Int=0 Until 6
         For Local x:Int=0 Until 6
            DrawRect OffsetX+x*Width,OffsetY+y*Height,Width,1
            DrawRect OffsetX+x*Width,OffsetY+y*Height,1,Height
            DrawRect OffsetX+x*Width+Width,OffsetY+y*Height,1,Height
            DrawRect OffsetX+x*Width,OffsetY+y*Height+Width,Width,1
            DrawText x+y+1,OffsetX+x*Width+Width/2,OffsetY+y*Height+Height/2
         Next
      Next
      
      Mx=(MouseX()-OffsetX)/Width
      My=(MouseY()-OffsetY)/Height
      
      ' Maus im Bereich
      If Mx<6 And My<6 And Mx>=0 And My>=0
         SetColor 255,0,0
         DrawOval OffsetX+Mx*Width-4,OffsetY+My*Height-4,8,8
         SetColor 255,255,255
      EndIf
   Flip
Until KeyDown(KEY_ESCAPE) Or AppTerminate()


Ich hoffe es macht nichts aus wenn ich zur Erklärung BlitzMax benutze Confused


Gruß,
FOODy
BlitzMax + MaxGUI, 64-bit Arch Linux: Intel Core² E8500 | 8 GB Ram | GeForce GTX 460 · 1024 MB

Farbfinsternis

BeitragDi, Apr 03, 2007 14:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Nee, eher nicht. Ich hole mal etwas weiter aus:

Ich benötige das um in AmiBlitz3 einen Ersatz für die Funktion DrawImage() zu schreiben. Auf dem AMIGA steht mir leider kein LoadAnimImage zur Verfügung.
Der Funktion übergebe ich das Bild, die X und Y Koordinate wo es hin geblitted werden soll und den zu blittenden Frame.
Innerhalb der Funktion lese ich die Breite und Höhe des Bildes aus, die Frame-Größe kenne ich über die Konstanten #TILE_WIDTH und #TILE_HEIGHT. Nun muss ich anhand der Framenummer, der Breite des Bildes, der Höhe des Bildes und der Framemaße ausrechnen wo die linke/obere Ecke des zu zeichnenden Bereichs liegt.
Farbfinsternis.tv

FOODy

BeitragDi, Apr 03, 2007 15:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmmmmm.....
Ich hoffe mal das ich es diesmal richtig verstanden habe Confused

Code: [AUSKLAPPEN]
SuperStrict
Framework BRL.GLMax2D
Import BRL.StandardIO

Const Width:Int=32
Const Height:Int=32

Graphics 480,320

' Pixmap generieren
Local i:Int=1
For Local y:Int=0 Until 3
   For Local x:Int=0 Until 3
      DrawRect x*Width,y*Height,Width,1
      DrawRect x*Width,y*Height,1,Height
      DrawRect x*Width+Width,y*Height,-1,Height
      DrawRect x*Width,y*Height+Width,Width,-1
      DrawText i,x*Width+Width/2,y*Height+Height/2
      i:+1
   Next
Next

Global pixmap:TPixmap = GrabPixmap(0,0,Width*6,Height*6)

' Tile besorgen
Local frame:TImage = LoadImage(GetTile(5))

Repeat
   Cls
      DrawPixmap pixmap, 64,64
      DrawImage frame,MouseX(),MouseY()
   Flip
Until KeyDown(KEY_ESCAPE) Or AppTerminate()

' Tile extrahieren
Function GetTile:TPixmap(index:Int)
   Local row:Int
   Local col:Int
   row = index/3
   col = index Mod 3
   Return pixmap.Window(col*Width,row*Height,Width,Height)
EndFunction



Gruß,
FOODy

EDIT:
So oben.
BlitzMax + MaxGUI, 64-bit Arch Linux: Intel Core² E8500 | 8 GB Ram | GeForce GTX 460 · 1024 MB
  • Zuletzt bearbeitet von FOODy am Di, Apr 03, 2007 15:13, insgesamt einmal bearbeitet

Holzchopf

Meisterpacker

BeitragDi, Apr 03, 2007 15:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Ganz einfach:

Code: [AUSKLAPPEN]
AnzahlSpalten = BreiteDesBildes /BreiteDerFrames

Spalte = Nummer Mod AnzahlSpalten
Zeile = ( Nummer -Spalte ) /AnzahlSpalten

KoordinateX = Spalte *BreiteDerFrames
KoordinateY = Zeile *HoeheDerFrames


Hoffe du wolltest das Wink

MfG
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Farbfinsternis

BeitragDi, Apr 03, 2007 15:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey, danke Holzchopf ... exakt das habe ich gesucht !! *thumbs up!*
Farbfinsternis.tv

Neue Antwort erstellen


Übersicht Sonstiges Smalltalk

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group