Entw.: Vektorisierung von Pixelgrafiken (2)

Programmversion 0.1Programmversion 0.1

Die Version 0.1 des Programms dient der Überarbeitung der Pixelgrafiken. Der Benutzer kann sehr schnell die Helligkeit, Kontrast und Schärfe eines Bildes verändern. Zusätzlich lassen sich die Konturen mit einem speziellen Filter nachzeichnen.

Je besser die Konturen der Pixelgrafik durch die Überarbeitung hervortreten, umso besser das Vektorisierungsergebnis.

Alle Bildkorrekturmöglichkeiten sind über sogenannte Filter aus Delphi-XE2-FireMonkey realisiert. Es lassen sich Bilder mit allen gängigen Grafikformate wie BMP, JPG und PNG verarbeiten. Die meisten Grafikoperationen laufen bei FireMonkey direkt über die GPU. Dies bedeutet u.U., dass das Programm auf älterer Hardware nicht lauffähig ist. Die Plattformvorausetzungen für das hier vorgestellte Programm können Sie nachlesen bei Embarcadero.

Die verwendeten Filter werden folgendermaßen initialisiert, wobei die Filter über ihre Namen anzusprechen sind:

 FilterSharpe := FilterByName('Sharpen');
 FilterRecSharpe := FilterClassByName('Sharpen').FilterAttr;
 FilterContrast := FilterByName('Contrast');
 FilterRecContrast := FilterClassByName('Contrast').FilterAttr;
 FilterMonochrome := FilterByName('Monochrome');
 FilterRecMonochrome := FilterClassByName('Monochrome').FilterAttr;
 FilterPaperSketch := FilterByName('PaperSketch');
 FilterRecPaperSketch := FilterClassByName('PaperSketch').FilterAttr;
Die Bedeutung der Filter geht aus ihren Namen hervor. Ein spezieller Filter ist PaperSketch. Er zeichnet Konturen mit einem Pinsel nach.

Auch die Filterparameter sind über deren Namen zu setzen:

 // Veraendern eines Schaerfewertes (0 ... 2)
 FilterSharpe.Values[FilterRecSharpe.Values[0].Name] := 1.2;
 // Veraendern eines Helligkeitwertes (-1 ... 1) 
 FilterContrast.Values[FilterRecContrast.Values[0].Name] := 0.5;
 // Veraendern eines Kontrastwertes (0 ... 2)
 FilterContrast.Values[FilterRecContrast.Values[1].Name] := 0.5; 
 // Veraendern des Brush-Wertes fuer PageSketch (0.6 ... 10) 
 FilterPaperSketch.Values[FilterRecPaperSketch.Values[0].Name] := 1.2;

Um die Parameteränderungen in Bitmaps auszugeben, ist folgender Code nötig:

 // Zeichnen der geaenderten Bitmap bezueglich der Schaerfe
 FilterSharpe.ValuesAsBitmap['Input'] := ImageSource.Bitmap;
 ImageDestination.Bitmap := TBitmap(FilterSharpe.ValuesAsBitmap['output']);
 
 // Zeichnen der geaenderten Bitmap bezueglich Kontrast und Helligkeit
 FilterContrast.ValuesAsBitmap['Input'] := ImageSource.Bitmap;
 ImageDestination.Bitmap := TBitmap(FilterContrast.ValuesAsBitmap['output']);
 
 // Zeichnen einer Schwarz/Weiss-Bitmap
 FilterMonochrome.ValuesAsBitmap['Input'] := ImageSource.Bitmap;
 ImageDestination.Bitmap := TBitmap(FilterMonochrome.ValuesAsBitmap['output']);
 
 // Zeichnen bezueglich der PaperSketch-Aenderung
 FilterPaperSketch.ValuesAsBitmap['Input'] := ImageSource.Bitmap;
 ImageDestination.Bitmap := TBitmap(FilterPaperSketch.ValuesAsBitmap['output']);

Der Download der Sourcen von Programmversion 0.1 kann hier erfolgen.

Der demnächst folgende Artikel liefert eine programmtechnische Kurzbeschreibung aller derzeit in Delphi-FireMonkey verfügbaren Filter.