Autor Beitrag
downdapp
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Mi 20.11.02 14:31 
Wie kann ich ein Linie glätten die so erstellt wurde

with canvas do begin
moveto(400,400);
lineto(200,250);
end; :shock:
Matthias
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 121



BeitragVerfasst: Mi 20.11.02 15:36 
:?: Hy,

was möchtest Du an dieser Linie noch glätten. Das kleinste
delta für ein Richtungsänderung ist nunmal 1 Pixel, egal
auf welchem Gerät Du die Linie ausgibst.

Matthias
downdapp Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Mi 20.11.02 16:51 
Muss ich extrem wiedersprechen!

Gib mal bei dir

sowas ein

with canvas do begin
moveto(400,300);
lineto(233,333);
end;

und du wirst sehen ess iss extrem kantig... :autsch:
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Mi 20.11.02 17:16 
er meint bestimmt Antialiasing, um schattierte Pixel an den Rändern der Stufen zu haben, damit die Linie nicht gestuft, sondern sanfter aussieht.
Da weiß ich aber nichts, was mit 'nem Canvas funktioniert. Entweder OpenGL mit aktiviertem AA, oder Direct3D (ehemaliges DirectDRAW-Interface) mit aktivertem AA. Das funktioniert an sich dann automatisch, wenn der GraKa-Treiber das kann.
Wenn du keins von beiden benutzen willst, müsstest du dir den Algo irgendwo suchen (aus den GraKA-Treibern) und manuell berechnen, wo welcher Pixel auf deme Canvas landen müsste. Wenn du aber nicht extreeeem viel MAthe drauf hast und viele Teile in Assembler schreibst, könnte's langsamer werden, als erwartet...

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
OregonGhost
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 215



BeitragVerfasst: Mi 20.11.02 17:35 
Ich weiß nicht, ob man GDI+ in Delphi benutzen kann, wenn ja, wäre das die Lösung des Problems, da damit Windows nativ Kantenglättung unterstützt. Wenn nicht, kannst du einfach mit Supersampling selbst eine Kantenglättung schreiben. Dazu zeichnest du das ganze Bild z.B. doppelt so groß (Breite UND Höhe, also vierfache Fläche) und verkleinerst es wieder, indem du den Durchschnitt nimmst (also die Pixel im großen Bild mit den Koordinaten [0,0], [0,1], [1,0], [1,1] werden im Ausgabebild zum Pixel [0,0]. Du rechnest also (bei 2x-Kantenglättung) immer die vier Pixel zusammen und bildest den Durchschnitt. Wenn du statt TCanvas TBitmap.Scanline nimmst und am Ende die Bitmap auf den TCanvas kopierst, ist die Geschwindigkeit auch akzeptabel. Der Haken ist halt, dass die nicht nur die Linie, sondern das komplette Rechteck, in dem die Linie liegt, geglättet wird, wenn du nicht gerade einen ausgefuchsten Algorithmus hast, um den Bereich zu beschränken.

_________________
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.