AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Problem bei Supersampling (Verkleinern einer TBitmap)
Thema durchsuchen
Ansicht
Themen-Optionen

Problem bei Supersampling (Verkleinern einer TBitmap)

Ein Thema von hellboyPS · begonnen am 28. Dez 2009 · letzter Beitrag vom 29. Dez 2009
 
hellboyPS

Registriert seit: 28. Dez 2009
5 Beiträge
 
#1

Problem bei Supersampling (Verkleinern einer TBitmap)

  Alt 28. Dez 2009, 13:07
Hallo liebe Foren-Mitglieder.
Ich programmiere seit einem halben mit Delphi und habe zu vielen mir aufgetauchten Fragen hier im Forum über die Forensuche oder über Google Antwort gefunden. Jedoch nicht zu diesem Problem.

Ich habe ein Programm geschrieben, dass die Mandelbrotmenge berechnet, was auch soweit sehr gut funktioniert. Jetzt habe ich mir überlegt das Bild schärfer zu machen und will Antialiasing (Supersampling) benutzen. Ich rendere also die Mandelbrotmenge vergrößert und muss sie danach möglichst intelligent auf die normale Größe bringen. Und das Problem liegt nun beim Verkleinern. Ich habe zuerst versucht Delphiinterne Funktionen wie StretchDraw() oder CopyRect() oder ähnliches, was aber immer zu einem schlechten Ergebnis führte (keine Verbesserung der Qualität!). Ich habe auch zu Testzwecken das größer gerenderte Bild als .bmp gespeichert und mit IrfanView geöffnet und dort wird es ja automatisch "verkleinert" zur Ansicht, da sieht es wunderbar aus.
Als Nächstes habe ich versucht einen eigenen Algorythmus zum Verkleinern geschrieben, welcher jedoch auch nicht wirklich die Qualität verbessert, einige Ungenauigkeiten und Fehler hat und außerdem recht viel Zeit beansprucht (4 bis 5 Sekunden, wobei die Delphiinternen Algorythmen ohne Zeitverzug arbeiten). Ich poste den Quellcode am Schluss (Vielleicht sind ja nur kleine Fehler drin =/ ).
Meine Frage ist also ob es etwas besonderes zu beachten gibt bei Supersampling und mein Ziel ist ein Algorythmus der das TBitmap qualitätsfördernd verkleinert.

Hier noch mein Quellcode zum Verkleinern meiner TBitmap:

Dabei ist Bitmap das groß gerenderte Bild (Höhe, Breite sind jeweils 400*Antialiase also beispielsweise bei 4x Antialiasing also 1600x1600) und die Variable Antialiase legt eben die Stärke vom Antialiasing fest (Also wie sehr das Bild vergrößert wurde)
Das Bild soll später die Maße 400x400 haben.
Das komplette Bild wird in Sektoren unterteilt und die Durchschnittsfarbe eines solchen Sektors wird ermittelt und damit das kleinere Bild erzeugt.

Delphi-Quellcode:
procedure TForm1.Antialiasing(Bitmap: TBitmap; Antialiase: Integer);
var secx,secy,x,y,sum:integer;
begin
 for secx := 0 to 399 do
 begin
  for secy := 0 to 399 do
  begin
   sum := 0;
   for x := 0 to Antialiase-1 do
   begin
    for y := 0 to Antialiase-1 do
    begin
     sum := sum+bitmap.canvas.Pixels[x+Antialiase*secx,y+Antialiase*secy];
    end;
   end;
   sum := round(sum/(Antialiase*Antialiase));
   bitmap.canvas.Pixels[secx,secy] := sum;
  end;
 end;
 bitmap.width := 400;
 bitmap.height := 400;
end;

Ich hoffe ihr könnt mir helfen

MfG hellboyPS
  Mit Zitat antworten Zitat
 


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 16:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz