tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
4
ZUGRIFFE
2544
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von the snake II
    the snake II the snake II ist offline Mitglied Gold
    Registriert seit
    Sep 2004
    Ort
    Krefeld
    Beiträge
    132
    Hallo zusammen,

    ich habe in Delphi 6 auf Windows XP einen Funktionsplotter geschrieben, der ähnlich wie ein Vektor Programm arbeitet; im moment sind erst zwei Funktionstypen implementiert (<- nennt man das so?): lineare und quadratische Funktionen. Sie sind in Arrays gespeichert. Für jeden der beiden Typen existiert ein Array, das jeweils aus einer Klasse besteht (TLinearGraph und TSquareGraph).
    Gezeichnet wird auf ein TCanvas Objekt einer TPaintBox (ehemals TImage; was ist eigentlich "besser"?)

    Das ganze Funktioniert bisher auch ganz gut.
    Doch hatte ich mir gedacht, dass man für die schönere (wenn auch evtl ungenauere) Darstellung einen Anti-Alias Filter schreiben könnte, der den Treppeneffekt lindert.

    Bei Wikipedia habe ich etwas über die "Nyquist-Frequenz" gefunden, auf die im Zusammenhang mit Anti-Aliasing von Vektorgraphiken verwiesen wird.
    Beim durchlesen des Artikels (hier der Link auf wikipedia.org) hab ich nichts verstanden.

    Was ich jedoch verstanden habe ist, dass viele Filter die Technik verwenden, beispielsweise für eine Linie zu berechnen, in welchem Maße jedes Pixel von dieser Linie geschnitten wird (also wie lang das Liniensegment ist, dass das betreffende Pixel beinhaltet) und anhand dessen das Pixel mit einem niedrigeren bzw. höheren Farbwert füllt.

    Allerdings fehlt mir hierbei der mathematische Ansatz.

    Hat jemand vielleicht eine Idee das ganze durch eine Formel zu lösen, oder mir zu erklären, wie das etwa klappen könnte.
    Oder ist das Ganze viel zu kompliziert für ein TCanvas?


    Viele Grüße,

    The Sanke II
     

  2. #2
    WieGehts WieGehts ist offline Mitglied Gold
    Registriert seit
    Oct 2003
    Beiträge
    130
    Hallo,
    der wikipedia-Artikel kommt aus der digitalen Signalverarbeitung. Diese hat aber - meine Meinung - nichts mit deinem Problem zu tun, sondern beschäftigt sich mit der Umwandlung analoger (Sprach)signale in digitale und umgekehrt.
    Ansonsten kann ich dir leider nicht helfen - nur eines:
    Was ich jedoch verstanden habe ist, dass viele Filter die Technik verwenden, beispielsweise für eine Linie zu berechnen, in welchem Maße jedes Pixel von dieser Linie geschnitten wird (also wie lang das Liniensegment ist, dass das betreffende Pixel beinhaltet) und anhand dessen das Pixel mit einem niedrigeren bzw. höheren Farbwert füllt.
    das ist der richtige Ansatz.

    WieGehts
     

  3. #3
    WieGehts WieGehts ist offline Mitglied Gold
    Registriert seit
    Oct 2003
    Beiträge
    130
    Hallo,

    bin gerade über das gestollpert: http://www.dsdt.info/tipps/?id=649
     

  4. #4
    Avatar von the snake II
    the snake II the snake II ist offline Mitglied Gold
    Registriert seit
    Sep 2004
    Ort
    Krefeld
    Beiträge
    132
    Zitat Zitat von WieGehts Beitrag anzeigen
    Hallo,

    bin gerade über das gestollpert: http://www.dsdt.info/tipps/?id=649
    Ja das ist eine gute Hilfe! Dankeschön!

    PS: Sorry für meine späte Antwort, hatte viel zu tun.
     

  5. #5
    LightningVector LightningVector ist offline Grünschnabel
    Registriert seit
    Jan 2007
    Beiträge
    1
    Hallo snake,

    leider schreibst du nicht, welche Ansprüche du an das Antialiasing stellst. Da hab ich schon unterschiedliche Varianten gesehen. Poste doch Beispiele, wo du was ändern möchtest.

    Mit höherer Mathematik kann ich nicht dienen, aber ein paar pragmatische Überlegungen kann ich beitragen.

    Das Glätten ist beim Zeichnen weniger aufwändig, als eine Bearbeitung der bitmap im Nachhinein.

    Variante1:
    Wenn du die x Achse pixelweise entlang gehst und punkte auf die canvas setzt, die x/f(x) entsprechen, dann wird der Graph an den steilen Stellen löchrig. Du kannst aber auch die Punkte von x/f(x-PixelBreite/2) bis x/f(x+PixelBreite/2) setzen, dann verschwinden die Lücken.

    Variante2:
    Du kannst die Kurve entlang gehen und für die benachbarten Pixels den Abstand zur Kurve berechnen. Abhängig vom Abstand kannst du einen Grauton verwenden. Daei wird eine Lieare Abhängigkeit eventuell verwaschen aussehen. Da kann man sich was besseres einfallen lassen und etwas experimentieren.

    So, hoffe das hilft.

    grüsse,
    lv
     

Ähnliche Themen

  1. Flash und Anti-Aliasing
    Von Strizzi im Forum Vektor-Programme
    Antworten: 9
    Letzter Beitrag: 10.11.04, 18:41
  2. Anti-Aliasing
    Von nudossi im Forum Vektor-Programme
    Antworten: 1
    Letzter Beitrag: 19.07.03, 19:47
  3. Anti-Aliasing in Flash MX
    Von Anne im Forum Flash Plattform
    Antworten: 1
    Letzter Beitrag: 27.05.03, 15:46
  4. anti-aliasing problem
    Von camilo im Forum Flash Plattform
    Antworten: 3
    Letzter Beitrag: 23.04.02, 13:03
  5. Anti Aliasing
    Von DJSnoopy im Forum Photoshop
    Antworten: 6
    Letzter Beitrag: 15.09.01, 16:52