AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Linien auf Canvas unterschiedlich breit dargestellt?
Thema durchsuchen
Ansicht
Themen-Optionen

Linien auf Canvas unterschiedlich breit dargestellt?

Ein Thema von loirad · begonnen am 5. Okt 2012 · letzter Beitrag vom 5. Okt 2012
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.344 Beiträge
 
Delphi XE2 Professional
 
#1

AW: Linien auf Canvas unterschiedlich breit dargestellt?

  Alt 5. Okt 2012, 12:21
Hallo,

ich versteh jetzt noch nicht ganz dein Problem.

Du hast die Breite um 5 Pixel erweitert und die Striche schauen dementsprechend aus - ich seh jetzt noch keinen Fehler
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
loirad

Registriert seit: 25. Nov 2009
135 Beiträge
 
Delphi 6 Professional
 
#2

AW: Linien auf Canvas unterschiedlich breit dargestellt?

  Alt 5. Okt 2012, 12:22
Der untere waagerechte Strich ist dünner dargestellt, als alle anderen Striche!
(Oder habe ich irgendwie einen Knick in der Optik )
Wer Fehler findet darf sie behalten!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.659 Beiträge
 
Delphi 12 Athens
 
#3

AW: Linien auf Canvas unterschiedlich breit dargestellt?

  Alt 5. Okt 2012, 12:25
Wo ist denn dieser Strich im ersten Bild? Ich verstehe nicht ganz, was Du vorhast, scheint mir.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
loirad

Registriert seit: 25. Nov 2009
135 Beiträge
 
Delphi 6 Professional
 
#4

AW: Linien auf Canvas unterschiedlich breit dargestellt?

  Alt 5. Okt 2012, 12:28
Er ist nicht dargestellt! Das ist ja das Problem! Vielleicht noch was zum Programm an sich:

Es ist ein Image im Formular mit der Größe 500*500. Das Bild ist größer als 500*500 und wird deshalb proportional verkleinert (über den Objektinspektor).
Wer Fehler findet darf sie behalten!
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.344 Beiträge
 
Delphi XE2 Professional
 
#5

AW: Linien auf Canvas unterschiedlich breit dargestellt?

  Alt 5. Okt 2012, 12:33
Er ist nicht dargestellt! Das ist ja das Problem! Vielleicht noch was zum Programm an sich:
Lass dir doch mal den Wert von deiner Variablen "breite" einfach mal ausgeben (Label, ShowMessage, ...)
Vielleicht wird der ja mal null
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.344 Beiträge
 
Delphi XE2 Professional
 
#6

AW: Linien auf Canvas unterschiedlich breit dargestellt?

  Alt 5. Okt 2012, 12:31
Wo ist denn dieser Strich im ersten Bild? Ich verstehe nicht ganz, was Du vorhast, scheint mir.
Ich glaub wir brauchen beide nen Augenarzt-Termin - ich seh den nämlich auch nicht. (Brille putzen half auch nicht)

Kann es sein, dass die Breite für den unteren Strich falsch berechnet wird?
Sprich - wenn die vorgebene Breite kleiner deiner 5 z. B. ist, dann kommt als berechneter Wert ein Wert null oder kleiner raus und bei einem drauf gerechneten Wert von 5 kommt ein berechneter Wert von 3 oder was raus?
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
loirad

Registriert seit: 25. Nov 2009
135 Beiträge
 
Delphi 6 Professional
 
#7

AW: Linien auf Canvas unterschiedlich breit dargestellt?

  Alt 5. Okt 2012, 12:38
Ich pack mal n Stückchen vom originalen Quelltext ran:

Delphi-Quellcode:
breite1:=round((Bild1.Picture.Bitmap.Width*Bild1.Picture.Bitmap.Height)*2*0.0000001)+5;
breite2:=round((Bild2.Picture.Bitmap.Width*Bild2.Picture.Bitmap.Height)*2*0.0000001)+5;
  if x1<x2 then
   begin
    for i:=(x2-x1) to ((x2-x1)+breite2) do
     begin
      Bild2.Picture.Bitmap.Canvas.MoveTo(i,0);
      Bild2.Picture.Bitmap.Canvas.LineTo(i,Bild2.Picture.Bitmap.Height);
     end;
   end;
  if x1>x2 then
   begin
    for i:=(x1-x2) to ((x1-x2)+breite1) do
     begin
      Bild1.Picture.Bitmap.Canvas.MoveTo(i,0);
      Bild1.Picture.Bitmap.Canvas.LineTo(i,Bild1.Picture.Bitmap.Height);
     end;
   end;
  if Bild1.Picture.Bitmap.Width-x1<Bild2.Picture.Bitmap.Width-x2 then
   begin
    for i:=(x2+(Bild1.Picture.Bitmap.Width-x1)) to ((x2+(Bild1.Picture.Bitmap.Width-x1))+breite2) do
     begin
      Bild2.Picture.Bitmap.Canvas.MoveTo(i,0);
      Bild2.Picture.Bitmap.Canvas.LineTo(i,Bild2.Picture.Bitmap.Height);
     end;
   end;
  if Bild1.Picture.Bitmap.Width-x1>Bild2.Picture.Bitmap.Width-x2 then
   begin
    for i:=(x1+(Bild2.Picture.Bitmap.Width-x2)) to ((x1+(Bild2.Picture.Bitmap.Width-x2))+breite1) do
     begin
      Bild1.Picture.Bitmap.Canvas.MoveTo(i,0);
      Bild1.Picture.Bitmap.Canvas.LineTo(i,Bild1.Picture.Bitmap.Height);
     end;
   end;


  if y1<y2 then
   begin
    for i:=(y2-y1) to (y2-y1+breite2) do
     begin
      Bild2.Picture.Bitmap.Canvas.MoveTo(0,i);
      Bild2.Picture.Bitmap.Canvas.LineTo(Bild2.Picture.Bitmap.Width,i);
     end;
   end;
  if y1>y2 then
   begin
    for i:=(y1-y2) to (y1-y2+breite1) do
     begin
      Bild1.Picture.Bitmap.Canvas.MoveTo(0,i);
      Bild1.Picture.Bitmap.Canvas.LineTo(Bild1.Picture.Bitmap.Width,i);
     end;
   end;
  if Bild1.Picture.Bitmap.Height-y1<Bild2.Picture.Bitmap.Height-y2 then
   begin
    for i:=(y2+(Bild1.Picture.Bitmap.Height-y1)) to ((y2+(Bild1.Picture.Bitmap.Height-y1))+breite2) do
     begin
      Bild2.Picture.Bitmap.Canvas.MoveTo(0,i);
      Bild2.Picture.Bitmap.Canvas.LineTo(Bild2.Picture.Bitmap.Width,i);
     end;
   end;
  if Bild1.Picture.Bitmap.Height-y1>Bild2.Picture.Bitmap.Height-y2 then
   begin
    for i:=(y1+(Bild2.Picture.Bitmap.Height-y2)) to ((y1+(Bild2.Picture.Bitmap.Height-y2))+breite1) do
     begin
      Bild1.Picture.Bitmap.Canvas.MoveTo(0,i);
      Bild1.Picture.Bitmap.Canvas.LineTo(Bild1.Picture.Bitmap.Width,i);
     end;
   end;
x1,x2,y1,y2 sind die Koordinaten von 2 Punkten (jeweils einer in einem Bild).
Und dann soll von diesen Punkten aus in alle 4 Richtungen der kleinste Abstand zur Wand gemessen werden und diese Wand in das größere Bild als Strich gemalt werden.
Wer Fehler findet darf sie behalten!
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.344 Beiträge
 
Delphi XE2 Professional
 
#8

AW: Linien auf Canvas unterschiedlich breit dargestellt?

  Alt 5. Okt 2012, 12:40
Hast du dich durch deinen Code schon mal durchgedebuggt?
Und dir auch mal die Werte angeschaut?
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
loirad

Registriert seit: 25. Nov 2009
135 Beiträge
 
Delphi 6 Professional
 
#9

AW: Linien auf Canvas unterschiedlich breit dargestellt?

  Alt 5. Okt 2012, 12:42
Eigentlich schon ...
Auch rein vom Logischen her - die Breite ist ja immer gleich breit...
Wer Fehler findet darf sie behalten!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.374 Beiträge
 
Delphi 12 Athens
 
#10

AW: Linien auf Canvas unterschiedlich breit dargestellt?

  Alt 5. Okt 2012, 12:47
Und dir ist dabei noch nicht aufgefallen, daß alle Linien 1 Pixel zu breit sind?

Denn richtig wäre ja wohl for i := x to x + breite - 1 do und nicht 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.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 09:27 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