Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Linienbruch im TImage (https://www.delphipraxis.net/22633-linienbruch-im-timage.html)

daniel8520 20. Mai 2004 15:52


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?

Ratte 23. Mai 2004 18:28

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

GLaforge 23. Mai 2004 18:33

Re: Linienbruch im TImage
 
Das Problem ist mir eigentlich unbekannt zumal du mit Canvas viele Möglichkeiten hast, so z.Bsp.:
Delphi-Quellcode:
Image1.Canvas.MoveTo(1,1);
Image1.Canvas.LineTo(2,2);
Durch diese Pixelangaben kommt es rein theoretisch nicht zu einer Verschiebung entlang eines Punktes.

cu

Nikolas 23. Mai 2004 18:34

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.

daniel8520 23. Mai 2004 19:37

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!

Nikolas 23. Mai 2004 20:55

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. :|

daniel8520 24. Mai 2004 08:19

Re: Linienbruch im TImage
 
Hier ist der Code:
Delphi-Quellcode:

{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;
Und hier die Erklärung:
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?

Tonic1024 24. Mai 2004 10:05

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

daniel8520 24. Mai 2004 12:01

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 06:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz