Hallo,
mit "Canvas.Line" kann ich Linien zeichnen. Jedoch sind diese Linien nicht kantengeglättet.
Gibt es eine Möglichkeit Linien mit geglätteten Kanten zu zeichenen?
Ich hatte das vor einigen Jahren in Free Pascal schon mal selbst programmiert, indem ich bei jedem Pixel geprüft habe, ob er sich in einem Abstand < 0.5 zum Rande der zu zeichnenden Linie befindet, und falls ja ihm eine dem genauen Abstand zum Linienrand entsprechende Farbintentensität gegeben habe, wobei ich das mit der vorherigen Farbe des Pixels verrechnet habe. Hat alles korrekt ausgesehen, nur hat die Zeichnung viel zu lange gedauert (ingesamt ein 3-5 Sekunden für vielleicht 100 Linien). Jetzt brauche ich sowas sehr häufig in der Sekunde, und dafür dauert das viel zu lang. Aber eigentlich müsste es da doch eine vorgefertigte schnellere Lösung geben, oder?
Kann ich Linien mit glatten Kanten zeichnen? (Antialiasing)
Re: Kann ich Linien mit glatten Kanten zeichnen? (Antialiasi
http://wiki.freepascal.org/Developing_w ... 2D_drawing
Ich glaube AggPas kann sowas. Vllt auch BGRABitmap.
Ich glaube AggPas kann sowas. Vllt auch BGRABitmap.
-
- Beiträge: 1224
- Registriert: So 20. Mär 2016, 22:14
- OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
- CPU-Target: Raspberry Pi 3
Re: Kann ich Linien mit glatten Kanten zeichnen? (Antialiasi
Eine Idee für ein schnelles Antialiasing wäre: Zeichne alles auf ein Image mit 2 oder 3facher Kantenlängen, resize das Image mit Antialiasing und pappe dann das Image auf das Canvas.
So würde ich das in Purebasic machen. Da ich in FreePascal erst einsteige, weiß ich leider nicht, ob es die entsprechenden Funktionen hier gibt.
So würde ich das in Purebasic machen. Da ich in FreePascal erst einsteige, weiß ich leider nicht, ob es die entsprechenden Funktionen hier gibt.
-
- Beiträge: 6918
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Kann ich Linien mit glatten Kanten zeichnen? (Antialiasi
Mit BGRABitmap geht es, habe es gerade probiert.
Ein Wermutstropfen hat es aber, man muss die Package BGRABitmap installieren, welche nicht bei Lazarus enthalten ist.
Code: Alles auswählen
uses .... , BGRABitmap;
procedure TForm1.FormPaint(Sender: TObject);
var
img: TBGRABitmap;
begin
img := TBGRABitmap.Create(ClientWidth, ClientHeight, clWhite);
img.CanvasBGRA.MoveTo(0, 0);
img.CanvasBGRA.LineTo(ClientWidth, ClientHeight);
img.Draw(Canvas, 0, 0);
img.Free;
Canvas.Line(10, 0, ClientWidth + 10, ClientHeight);// ohne Antialiasing
end;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot