AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Linienbruch im TImage
Thema durchsuchen
Ansicht
Themen-Optionen

Linienbruch im TImage

Ein Thema von daniel8520 · begonnen am 20. Mai 2004 · letzter Beitrag vom 24. Mai 2004
Antwort Antwort
daniel8520
(Gast)

n/a Beiträge
 
#1

Linienbruch im TImage

  Alt 20. Mai 2004, 16:52
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?
  Mit Zitat antworten Zitat
Ratte

Registriert seit: 12. Dez 2003
Ort: Erfurt
345 Beiträge
 
Delphi 2005 Personal
 
#2

Re: Linienbruch im TImage

  Alt 23. Mai 2004, 19:28
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
Angehängte Grafiken
Dateityp: bmp test_100.bmp (398 Bytes, 44x aufgerufen)
Schiffsratte der U.S.S. Delphipraxis, Laderaum 4538
BUSH:= TTerminator.create;
  Mit Zitat antworten Zitat
Benutzerbild von GLaforge
GLaforge

Registriert seit: 16. Nov 2003
Ort: Halle
106 Beiträge
 
Delphi 6 Enterprise
 
#3

Re: Linienbruch im TImage

  Alt 23. Mai 2004, 19:33
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
Cogito ergo sum - Ich denke also bin Ich
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#4

Re: Linienbruch im TImage

  Alt 23. Mai 2004, 19:34
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.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
daniel8520
(Gast)

n/a Beiträge
 
#5

Re: Linienbruch im TImage

  Alt 23. Mai 2004, 20:37
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!
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#6

Re: Linienbruch im TImage

  Alt 23. Mai 2004, 21:55
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.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
daniel8520
(Gast)

n/a Beiträge
 
#7

Re: Linienbruch im TImage

  Alt 24. Mai 2004, 09:19
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?
  Mit Zitat antworten Zitat
Benutzerbild von Tonic1024
Tonic1024

Registriert seit: 10. Sep 2003
Ort: Cuxhaven
559 Beiträge
 
RAD-Studio 2009 Ent
 
#8

Re: Linienbruch im TImage

  Alt 24. Mai 2004, 11:05
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
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?
  Mit Zitat antworten Zitat
daniel8520
(Gast)

n/a Beiträge
 
#9

Re: Linienbruch im TImage

  Alt 24. Mai 2004, 13:01
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!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:32 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