Seite 1 von 1

0,0 Pixel im Canvas

Verfasst: Montag 18. Oktober 2004, 20:00
von antimicro
Hi,
kenn jemand das Problem das der erste Pixel immer oben links ist (wo er ja auch hingehört). Wenn ich jetzt mal den "NullPunkt" unten links brauche, wie geh ich da vor?

Mit einem Offset arbeiten oder gibts da auch elegantere Lösungen?

Hört sich etwas seltsam an aber vielleicht kenn ja einer das Problem.

Dank im Voraus!

Verfasst: Montag 18. Oktober 2004, 20:41
von mawe
Hi!

Naja, bei deinem "0-Punkt" ist dann eben x=0 und y=Höhe des Canvas.
Du musst dann immer die tatsächlichen y-Werte von der Höhe abziehen. Um's einfacher zu machen, kann man die Umwandlung ja in eine Funktion packen. Tolle Erklärung :?. Beispiel:

Code: Alles auswählen

from Tkinter import *

x1,x2 = 100,100

def y(i):
	return x2 - i   # vielleicht noch minus ein Offset, soll ja nicht in der Ecke kleben :-)

root = Tk()
c = Canvas(width=x1,height=x2)
c.pack()
c.create_line(
	0,y(0),       # "0-Punkt"
	10,y(10),
	arrow=FIRST)
mainloop()
Etwas wirklich eleganteres fällt mir auch nicht ein.

Gruß, mawe

Verfasst: Montag 18. Oktober 2004, 20:52
von Dookie
Hi antimicro,

das Problem kennt jeder, der sich etwas mit Computergrafik beschäftigt.
Gelöst wird das Problem meist durch eine Verschiebung der Koordinaten nach links unten und einer Skalierung der y-Werte mit -1. Das ganze lässt sich vereinfachen, indem man einfach die y Koordinate von der Höhe des Ausgabefensters abzieht.

Code: Alles auswählen

def ktrans(canvas, x, y):
        return x, canvas["height"] - y

Gruß

Dookie

Verfasst: Montag 18. Oktober 2004, 20:56
von antimicro
ah...
NullPunkt verschieben ist klar und damit der darüberliegende Pixel nicht -1 vom Offset ist einfach mal -1. Hmm... das sollte dann auch so klappen.

besten Dank

Verfasst: Montag 18. Oktober 2004, 20:58
von mawe
Hi!

@Dookie:
Klingt wie das was ich gesagt habe :wink:

BTW: Sehe ich schlecht oder kann man die oberste und die unterste Pixelreihe nicht erreichen?

Gruß, mawe

Verfasst: Montag 18. Oktober 2004, 21:51
von antimicro
cool... jetzt wo du's sagst.

Ich hab oben und links zwei Pixel zu wenig und unten und rechts zwei Pixel zu viel. => mit WindowsXP und Python 2.3.4

Verfasst: Dienstag 19. Oktober 2004, 00:55
von Dookie
Hi nochmal,

kleine Berichtigung:

Code: Alles auswählen

def ktrans(canvas, x, y):
        return x, (canvas["height"] - 1) - y
Bei einer Höhe von z.B. 480 ist der grösste y-Wert 479 und davon muss y abgezogen werden. Der kleinst y-Wert is ja 0 und von 0 - 479 sinds dann die 480 Zeilen.


Gruß

Dookie
@mawe: ich hab etwas zu lange gebraucht für mein Posting, weil die Nudeln fürs Abendessen dazwischen abgeseiht werden wollten :)