![]() |
Linienbruch im TImage
Hallo,
ich hab ein kleines Problem: Wenn ich eine Linie in einem TImage zeichne, dann verschiebt sich plötzlich, manchmal die Linie nach einen bestimmten Punkt um einen Pixel nach unten, oben, links oder rechts. Kennt jemand dieses Problem? Bekommt man das irgendwie weg? |
Re: Linienbruch im TImage
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
meinst du du das wie im Anhang? Wenn ja: Nein, das liegt am Algo der die Linie zeichnet. Du könntest näturlich einen besseren Algo u. eigene proceduren schreiben, aber ich glaube dass die Algo's von Borland sehr gut sind. Ratte |
Re: Linienbruch im TImage
Das Problem ist mir eigentlich unbekannt zumal du mit Canvas viele Möglichkeiten hast, so z.Bsp.:
Delphi-Quellcode:
Durch diese Pixelangaben kommt es rein theoretisch nicht zu einer Verschiebung entlang eines Punktes.
Image1.Canvas.MoveTo(1,1);
Image1.Canvas.LineTo(2,2); cu |
Re: Linienbruch im TImage
Wie zeichnest du die Linie denn?
Wenn sie nicht genau waagrecht oder senkrecht ist, musst du mit solchen 'graphischen Rundungsfehlern' leben, solange du vor einem Bildschirm sitzt, bei dem du ein einzelnes Pixel noch erkennen kannst. |
Re: Linienbruch im TImage
Naja, das Problem ist, dass ich den neuen Punkt über Cosisnus bzw. Sinus ausrechnen muss! Dabei wird es bestimmt zu Rundungsfehlern kommen!
Wisst ihr vielleicht, wie man das unterdrücken könnte. Falls jemand nicht verstanden hat, was ich meine: Einfach posten! |
Re: Linienbruch im TImage
Zeig doch mal was du machen willst (Code).
Diese Ungenauigkeit kannst du nicht umgehen. Ein Pixel ist entweder gefärbt oder nicht, halbe oder drei/viertel Pixel kann man einfach nicht ansteuern. Falls das ganze ein Graphik ergeben soll, kannst du nur alles größer Zeichnen und so den prozentualen Fehler verkleinern. :| |
Re: Linienbruch im TImage
Hier ist der Code:
Delphi-Quellcode:
Und hier die Erklärung:{aX = Die aktuelle X-Koordinate, vom Programm gemerkt, auf einem TImage} {aY = Die aktuelle Y-Koordinate, vom Programm gemerkt, auf einem TImage} procedure TMainForm.Vor(la: Integer); var x, y: Extended; begin x := aX + la * cos(Kurs); y := aY - la * sin(Kurs); Draw(x,y) end; Also, an die Prozedur wird wie man sehen kann, der Paramter "la" übergeben. "la" soll die Länge der zuzeichnenden, neuen Linien angeben. Kurs, gibt die Richtung der zuzeichnenden Linie in Grad an (Bogenmaß). Es soll nun der neue Punkt (x,y) berechnet werden. Da man sich das ganze wie ein Steigungsdreieck vorstellen muss, hab ich natürlich nur eine Seite, nämlich "la". Aber ich benötige ja noch die anderen beiden Seiten, um die Verschiebung auf der X- bzw. Y-Achse rauszubekommen. Und das geht ja nur über den Cosinus, bzw. den Sinus. Achso, mit "Draw(x,y)" wird dann nur eine Linie zum neuen Punkt gezeichnet. Jetzt wär natürlich eine Möglichkeit, die Linie einfach dicker zuzeichnen. Aber wie stell ich dass am Besten an? |
Re: Linienbruch im TImage
Hi...
Also wenn mich nicht alles täuscht, ist doch Draw abgeleitet von TCanvas und über diesen müsstest du einen Pen definieren können... Pen hat die Eigenschft width (Standard = 1). Diese gibt die Breite der Linie (Rahmen des Objekts) an... MfG Tonic |
Re: Linienbruch im TImage
Nein, nein. Draw ist nicht abgeleitet vom Canavas. Draw ist ein eigene, von mir geschriebene Prozedur. Sie bewirkt lediglich, dass eine Linie zum neuen Punkt (x,y) gezogen wird.
Verstehst du? Die Prozedur Draw hat direkt nichts mit dem Canavas zu tun. Indirekt dann doch wieder, weil sie ja dann, mit LineTo, auf das Canavas des TImages zeichnet. Ich werd mal schau'n, ob ich die Breite des Pens finden kann, ansonsten meld ich mich sicher nochmal. Thx für eure Hilfe, schonmal! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz