Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Linien auf Canvas unterschiedlich breit dargestellt? (https://www.delphipraxis.net/170846-linien-auf-canvas-unterschiedlich-breit-dargestellt.html)

himitsu 5. Okt 2012 12:47

AW: Linien auf Canvas unterschiedlich breit dargestellt?
 
Und dir ist dabei noch nicht aufgefallen, daß alle Linien 1 Pixel zu breit sind?

Denn richtig wäre ja wohl
Delphi-Quellcode:
for i := x to x + breite - 1 do
und nicht
Delphi-Quellcode:
for i := x to x + breite do
.

10 bis 10+2 = 10 bis 12 = 10, 11 und 12 = 3



Wenn du mal direkt auf ein TPaintBox.Canvas (oder Dergleichen) zeichnen würdest, dann die Form und die IDE nebeneinander legst, dann kannst du den Code Zeile für Zeile debuggen und siehst direkt was da genau passiert.

p80286 5. Okt 2012 12:48

AW: Linien auf Canvas unterschiedlich breit dargestellt?
 
Ich denke mal, daß Du durchaus richtig siehst, nur wenn man Dein Bild (das zweite) vergrößert, dann sieht man einen Farbverlauf, der u.U. ein Strich sein könnte.
Wenn Du also die Ergebnisse Deines Programms beurteilen willst, solltest Du mit BMP arbeiten. JPG ist ganz klar nicht zu empfehlen.
(vielleicht ist ja auch die komprimierung zu hoch gewählt....)

Gruß
K-H

Helmi 5. Okt 2012 12:50

AW: Linien auf Canvas unterschiedlich breit dargestellt?
 
Was für Werte bekommst du denn für "breite1" und "breite2", einmal ohne und einmal mit den 5?

Wo wird eigentlich die Breite für Canvas gesetzt?

loirad 5. Okt 2012 13:02

AW: Linien auf Canvas unterschiedlich breit dargestellt?
 
Zitat:

Wenn du mal direkt auf ein TPaintBox.Canvas (oder Dergleichen) zeichnen würdest, dann die Form und die IDE nebeneinander legst, dann kannst du den Code Zeile für Zeile debuggen und siehst direkt was da genau passiert.
Jup werd ich gleich mal machen!

Edit: Er läuft jede for-Schleife genau 7 Mal (in dem Beispielbild) durch! Jedoch erscheint die untere horizontale Linie erst beim 3. Durchlauf, die anderen schon beim 2.! Ein Anzeigefehler?

Zitat:

Ich denke mal, daß Du durchaus richtig siehst, nur wenn man Dein Bild (das zweite) vergrößert, dann sieht man einen Farbverlauf, der u.U. ein Strich sein könnte.
Das ist nur ein Bildschirmfoto! Ich seh es hier aber auf meinem Bildschirm sehr deutlich, dass es einen Dickenunterschied gibt!

Zitat:

Was für Werte bekommst du denn für "breite1" und "breite2", einmal ohne und einmal mit den 5?
Das ist von Bild zu Bild unterschiedlich -
in diesem Fall bekomme ich für breite1: 6 bzw 1 und für breite2: 5 bzw 0

Zitat:

Wo wird eigentlich die Breite für Canvas gesetzt?
Welche Breite? Was meinst du?

Helmi 5. Okt 2012 13:12

AW: Linien auf Canvas unterschiedlich breit dargestellt?
 
Zitat:

Zitat von loirad (Beitrag 1185905)
Zitat:

Wenn du mal direkt auf ein TPaintBox.Canvas (oder Dergleichen) zeichnen würdest, dann die Form und die IDE nebeneinander legst, dann kannst du den Code Zeile für Zeile debuggen und siehst direkt was da genau passiert.
Jup werd ich gleich mal machen!

Edit: Er läuft jede for-Schleife genau 7 Mal (in dem Beispielbild) durch! Jedoch erscheint die untere horizontale Linie erst beim 3. Durchlauf, die anderen schon beim 2.! Ein Anzeigefehler?


Auf welche Position(en) wird denn beim 1. und 2. Durchlauf gezeichnet?

Zitat:

Zitat von loirad (Beitrag 1185905)
Zitat:

Was für Werte bekommst du denn für "breite1" und "breite2", einmal ohne und einmal mit den 5?
Das ist von Bild zu Bild unterschiedlich -
in diesem Fall bekomme ich für breite1: 6 bzw 1 und für breite2: 5 bzw 0

Was ist wenn null rauskommt?


Zitat:

Zitat von loirad (Beitrag 1185905)
Zitat:

Wo wird eigentlich die Breite für Canvas gesetzt?
Welche Breite? Was meinst du?

Ich vermiss irgendwo die Angabe:
Delphi-Quellcode:
Bild.Picture.Bitmap.Canvas.Pen.Width := 1;
Sprich dein Malstift malt 1 Pixel breit

himitsu 5. Okt 2012 13:14

AW: Linien auf Canvas unterschiedlich breit dargestellt?
 
Ist das Bild skaliert?

Die Skalierung im TImage ist schnell, aber "schlechter".
Beim vergrößern werden ganze Zeilen doppelt gemalt und beim Verkleinern einfach weggelassen.

loirad 5. Okt 2012 13:28

AW: Linien auf Canvas unterschiedlich breit dargestellt?
 
Zitat:

Auf welche Position(en) wird denn beim 1. und 2. Durchlauf gezeichnet?
Das wird nicht angezeigt, da das Bild skaliert ist.

Zitat:

Was ist wenn null rauskommt?
Dann wird es, wie im 1. Bild nicht gemalt!

Zitat:

Ich vermiss irgendwo die Angabe:
Bild.Picture.Bitmap.Canvas.Pen.Width := 1; Sprich dein Malstift malt 1 Pixel breit
Das kannte ich noch garnicht:oops: - ich male dicker mit der for-Schleife

Zitat:

Ist das Bild skaliert?

Die Skalierung im TImage ist schnell, aber "schlechter".
Beim vergrößern werden ganze Zeilen doppelt gemalt und beim Verkleinern einfach weggelassen.
Ja das Bild ist skaliert - wie umgehe ich das mit dem Weglassen? - Das wird wohl der Fehler sein, dass wichtige markierte Linien weggelassen werden!

DeddyH 5. Okt 2012 13:39

AW: Linien auf Canvas unterschiedlich breit dargestellt?
 
Dann skalier die Grafik doch selbst mit StretchBlt, setz vorher den Mode auf HALFTONE und setz Stretch im Image auf false. Das wird noch mein Lieblinkslink: StretchGraphic :lol:

loirad 5. Okt 2012 13:48

AW: Linien auf Canvas unterschiedlich breit dargestellt?
 
@DeddyH: Das ist mir zu hoch.

@all: Kann man auch direkt auf die Imagekomponente malen (also so, dass bei einer 500*500 Komponente ein Punkt in (250,250) bei jedem Bild in der Mitte der Komponente ist? Wenn ja wie?

DeddyH 5. Okt 2012 13:52

AW: Linien auf Canvas unterschiedlich breit dargestellt?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Du brauchst doch nur 4 Parameter: Quell- und Zielgrafik (kann auch dieselbe sein) sowie maximale Breite und Höhe, Smooth ist per default true. Was ist daran zu hoch?

[edit] Ich habe mal eine Demo erstellt, die eine Bitmap erzeugt und im Speicher hält, zum Zeichnen eine Kopie dieser Bitmap erstellt, auf dieser herummalt, das dann skaliert und in einem Image darstellt. Der Code ist nicht frei von DRY, aber darauf kam es mir jetzt nicht an. [/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:12 Uhr.
Seite 2 von 3     12 3      

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