Difference between revisions of "BGRABitmap/de"

From Free Pascal wiki
Jump to navigationJump to search
(→‎Download: remove old link)
 
(34 intermediate revisions by 8 users not shown)
Line 1: Line 1:
 
{{BGRABitmap}}
 
{{BGRABitmap}}
  
Siehe auch: [[Developing with Graphics]]
+
Siehe auch: [[Developing with Graphics/de|Entwickung mit Grafik]]
  
 
===Beschreibung===
 
===Beschreibung===
'''BGRABitmap''' ist eine Sammlung von Units zum Erzeugen und Modifizieren von Bildern mit Transparenzinformationen (Alphakanal). Der direkte Zugriff auf einzelne Pixels eine schnelle Bildbearbeitung. Diese Bibliothek wurde optimiert und getestet unter Windows und Ubuntu, mit den Schnittstellen win32 und gtk2.
+
'''BGRABitmap''' ist eine Sammlung von Units zum Erzeugen und Modifizieren von Bildern mit Transparenzinformationen (Alphakanal). Der direkte Zugriff auf einzelne Pixels erlaubt eine schnelle Bildbearbeitung. Diese Bibliothek wurde optimiert und getestet unter Windows, Ubuntu und Mac OS X, mit den Schnittstellen win32, gtk1, gtk2 und carbon.
  
Die Hauptklasse ist ''TBGRABitmap'' die von ''TFPCustomImage'' abgeleitet wurde. Es gibt auch eine Klasse ''TBGRAPtrBitmap'' die es erlaubt, bereits allozierte BGRA-Daten zu bearbeiten. Diese Formate bestehen aus 4 Bytes pro Pixel (blau, grün, rot und alpha; in dieser Reihenfolge).
+
Die Hauptklasse ist ''TBGRABitmap'', die von ''TFPCustomImage'' abgeleitet wurde. Es gibt auch eine Klasse ''TBGRAPtrBitmap'', die es erlaubt, bereits allozierte BGRA-Daten zu bearbeiten. Dieses Format besteht aus 4 Bytes pro Pixel (blau, grün, rot und alpha; in dieser Reihenfolge).
  
 
===Verwendung von BGRABitmap===
 
===Verwendung von BGRABitmap===
 +
 +
====Tutorial====
 +
 +
*[http://www.youtube.com/watch?v=HGYSLgtYx-U How to convert an application from TCanvas to BGRABitmap]
 +
*[[BGRABitmap tutorial TAChart|Using BGRABitmap to render a TAChart]]
 +
*[[BGRABitmap tutorial/de|Eine Serie von Tutorials zum schrittweisen Lernen]]
 +
*Beispiele im [http://lazpaint.svn.sourceforge.net/viewvc/lazpaint/ LazPaint Repositorium].
 +
 +
====Overview====
 +
 +
Die Funktionen haben lange Namen um verstehbar zu sein. Nahezu Alles ist erreichbar über eine Funktion oder eine Eigenschaft des TBGRABitmap-Objekts. Beispielsweise können Sie CanvasBGRA benutzen, um eine Zeichenfläche ähnlich zu TCanvas (mit Transparenz und Antialiasing) zu erhalten; und mit Canvas2D haben Sie die gleichen Merkmale wie bei [https://developer.mozilla.org/en/HTML:Canvas HTML canvas].
 +
 +
Einige besondere Merkmale erfordern bestimmte Units, aber möglicherweise benötigen Sie diese nicht:
 +
* TBGRAMultishapeFiller für antialiasierte Verbindungen bei Polygonen ist in BGRAPolygon
 +
* TBGRATextEffect ist in BGRATextFX
 +
* 2D Transformationen sind in BGRATransform
 +
* TBGRAScene3D ist in BGRAScene3D
 +
* Falls Sie Ebenen benötigen, bietet Ihnen BGRALayers eine TBGRALayeredBitmap
 +
 +
Die Doppel-Pufferung ist kein Bestandteil von BGRABitmap, weil es dabei mehr um den Umgang mit Forms geht. Um ein Double-buffering zu machen, können Sie TBGRAVirtualScreen aus dem [[BGRAControls]]-Package verwenden.
 +
 +
Abgesehen davon, arbeitet die Doppel-Pufferung in BGRABitmap wie gewohnt. Sie benötigen eine Bitmap, wo Sie Ihre Zeichnung speichern, und zeigen diese mit der Einzelanweisung Draw an.
 +
 +
====Einfaches Beispiel====
 +
 
Sie kopieren dazu die BGRABitmap-Units und linken sie zu Ihrem Projekt:
 
Sie kopieren dazu die BGRABitmap-Units und linken sie zu Ihrem Projekt:
<delphi>
+
<syntaxhighlight lang="pascal">
Uses Classes, SysUtils, BGRABitmap, BGRABitmapTypes;
+
Uses  
</delphi>
+
  Classes, SysUtils, BGRABitmap, BGRABitmapTypes;
 +
</syntaxhighlight>
  
 
Die Unit BGRABitmapTypes enthält alle notwendigen Definitionen, aber Sie können auch einfach eine Variable vom Typ BGRABitmap deklarieren, um eine Bitmap zu laden und anzuzeigen. Dann ist der erste Schritt der, ein TBGRABitmap-Objekt zu erzeugen:
 
Die Unit BGRABitmapTypes enthält alle notwendigen Definitionen, aber Sie können auch einfach eine Variable vom Typ BGRABitmap deklarieren, um eine Bitmap zu laden und anzuzeigen. Dann ist der erste Schritt der, ein TBGRABitmap-Objekt zu erzeugen:
<delphi>
+
<syntaxhighlight lang="pascal">
var bmp: TBGRABitmap;
+
var  
 +
  bmp: TBGRABitmap;
 
begin
 
begin
   bmp := TBGRABitmap.Create(100,100,BGRABlack); //erzeugt ein 100x100 Pixel großes Bild mit schwarzem Hintergrund
+
   bmp := TBGRABitmap.Create(100, 100, BGRABlack); // erzeugt ein 100x100 Pixel großes Bild mit schwarzem Hintergrund
  
   bmp.FillRect(20,20,60,60,BGRAWhite, dmSet); //zeichnet ein weißes Quadrat ohne Transparenz
+
   bmp.FillRect(20, 20, 60, 60, BGRAWhite, dmSet); // zeichnet ein weißes Quadrat ohne Transparenz
   bmp.FillRect(40,40,80,80,BGRA(0,0,255,128), dmDrawWithTransparency); //zeichnet ein transparentes blaues Quadrat
+
   bmp.FillRect(40, 40, 80, 80, BGRA(0, 0, 255, 128), dmDrawWithTransparency); // zeichnet ein transparentes blaues Quadrat
 
end;
 
end;
</delphi>
+
</syntaxhighlight>
  
 
Zuletzt wird die Bitmap angezeigt:
 
Zuletzt wird die Bitmap angezeigt:
<delphi>
+
<syntaxhighlight lang="pascal">
 
procedure TFMain.FormPaint(Sender: TObject);
 
procedure TFMain.FormPaint(Sender: TObject);
 
begin
 
begin
 
   bmp.Draw(Canvas, 0, 0, True); // zeichnet die Bitmap im opaquen Modus (schneller)
 
   bmp.Draw(Canvas, 0, 0, True); // zeichnet die Bitmap im opaquen Modus (schneller)
 
end;
 
end;
</delphi>
+
</syntaxhighlight>
  
 
===Anmerkungen===
 
===Anmerkungen===
Line 39: Line 66:
 
Grundsätzlich gibt es zwei Zeichenmodi. Der erste besteht darin, die Inhaltsinformation eines Pixels vollständig zu ersetzen. Die zweite besteht darin, das vorhandene Pixel mit einem anderen zu überblenden, das nennt man Alphablending.
 
Grundsätzlich gibt es zwei Zeichenmodi. Der erste besteht darin, die Inhaltsinformation eines Pixels vollständig zu ersetzen. Die zweite besteht darin, das vorhandene Pixel mit einem anderen zu überblenden, das nennt man Alphablending.
  
Die BGRABitmap-Funktionen bieten dazu 3 Modi an:
+
Die BGRABitmap-Funktionen bieten dazu 4 Modi an:
 
* dmSet : ersetzt die 4 Bytes des gezeichneten Pixels. Die vorhandene Transparenz bleibt nicht erhalten.
 
* dmSet : ersetzt die 4 Bytes des gezeichneten Pixels. Die vorhandene Transparenz bleibt nicht erhalten.
 
* dmDrawWithTransparency : zeichnet mit Alphablending und mit Gammakorrektur (siehe unten)
 
* dmDrawWithTransparency : zeichnet mit Alphablending und mit Gammakorrektur (siehe unten)
 
* dmFastBlend oder dmLinearBlend : zeichnet mit Alphablending aber ohne Gammakorrektur (schneller, bewirkt aber Farbverzerrungen bei geringen Intensitäten).
 
* dmFastBlend oder dmLinearBlend : zeichnet mit Alphablending aber ohne Gammakorrektur (schneller, bewirkt aber Farbverzerrungen bei geringen Intensitäten).
 +
* dmXor : wendet Xor auf jede Komponente an und enthält Alpha (falls Sie die Farben invertieren wollen, aber Alpha beibehalten, nehmen Sie BGRA(255,255,255,0) )
  
 
===Integrierte Zeichenfunktionen===
 
===Integrierte Zeichenfunktionen===
Line 55: Line 83:
 
* einfache Füllung (Floodfill) oder progressive Füllung
 
* einfache Füllung (Floodfill) oder progressive Füllung
 
* Farbverläufe (linear, radial...)
 
* Farbverläufe (linear, radial...)
* abgerundete Rechtecke (ohne Antialiasing)
+
* abgerundete Rechtecke
 
* Texte mit Transparenz
 
* Texte mit Transparenz
  
 
===Zeichnen auf der Leinwand===
 
===Zeichnen auf der Leinwand===
  
It is possible to draw with a ''Canvas'' object, with usual functions but without antialiasing. Opacity of drawing is defined by the ''CanvasOpacity'' property. This way is slower because it needs image transformations.
+
Sie können mit einem ''Canvas''-Objekt zeichnen, mit den üblichen Funktionen, aber ohne Antialiasing. Die Opazität (Undurchsichtbarkeit) der Zeichnung ist durch die Eigenschaft ''CanvasOpacity'' definiert. Dieses Verfahren ist langsamer, weil dazu Bildumformungen angewendet werden.
  
 
===Direkter Zugriff auf ein Pixel===
 
===Direkter Zugriff auf ein Pixel===
  
To access pixels, there are two properties, ''Data'' et ''Scanline''. The first gives a pointer to the firts pixel of the image, and the second gives a pointer to the first pixel of a given line.
+
Zur direkten Bearbeitung von Pixels gibt es zwei Eigenschaften, ''Data'' und ''Scanline''. Die erste gibt einen Zeiger auf das erste Pixel im Bild zurück, die zweite hingegen einen Zeiger auf das erste Pixel einer bestimmten Zeile.
  
<delphi>
+
<syntaxhighlight lang="pascal">
 
var  
 
var  
  bmp: TBGRABitmap;
+
  bmp: TBGRABitmap;
  p: PBGRAPixel;
+
  p: PBGRAPixel;
  n: integer;
+
  n: integer;
  
 
begin
 
begin
    bmp := TBGRABitmap.Create('image.png');
+
  bmp := TBGRABitmap.Create('image.png');
    p := bmp.Data;
+
  p := bmp.Data;
    for n := bmp.NbPixels-1 downto 0 do
+
  for n := bmp.NbPixels-1 downto 0 do begin
    begin
+
    p^.red := not p^.red;   // invertiert den roten Kanal
          p^.red := not p^.red; //invert red canal
+
    inc(p);
          inc(p);
+
  end;
    end;
+
  bmp.InvalidateBitmap;     // beachten Sie, dass wir direkt auf die Pixels zugegriffen haben
    bmp.InvalidateBitmap; //note that we have accessed directly to pixels
+
  bmp.Draw(Canvas, 0, 0, True);
    bmp.Draw(Canvas,0,0,True);
+
  bmp.Free;
    bmp.Free;
 
 
end;
 
end;
</delphi>
+
</syntaxhighlight>
  
It is necessary to call the function ''InvalidateBitmap'' to rebuild the image in a next call to ''Draw''' for example. Notice that the line order can be reverse, depending on the ''LineOrder'' property.
+
Es ist erforderlich, die Funktion ''InvalidateBitmap'' aufzurufen, um das Bild beim nächsten Aufruf von ''Draw'' neu zeichnen zu lassen. Beachten Sie: Die Reihenfolge der Zeilen kann auch umgekehrt sein, abhängig von der Eigenschaft ''LineOrder''.
 +
 
 +
Siehe auch den Vergleich zwischen verschiedenen [[Fast direct pixel access|Methoden des direkten Pixel-Zugriffs]].
  
 
=== Bildmanipulation ===
 
=== Bildmanipulation ===
  
Available filters:
+
Verfügbare Filter (mit der Vorsilbe Filter):
  
    * Radial blur : non directionnal blur
+
* Radial blur : nicht-direktionale Unschärfe
    * Motion blur : directionnal blur
+
* Motion blur : richtungsabhängige Bewegungsunschärfe
    * Custom blur : blur according to a mask
+
* Custom blur : benutzerdefinierte Unschärfe (verwendet eine Maske)
    * Median : computes the median of colors around each pixel, which soften corners
 
    * Smooth : soften whole image, complentary to Sharpen
 
    * Sharpen : makes contours more accute, complentary to Smooth
 
    * Contour : draws contours on a white background (like a pencil drawing)
 
    * Emboss : draws contours with shadow
 
    * EmbossHighlight : draws contours of a selection defined with grayscale
 
    * Grayscale : converts colors to grayscale with gamma correction
 
    * Normalize : use whole range of color luminosity
 
    * Rotate : rotation of the image around a point
 
    * SmartZoom3 : resize the image x3 and detects borders, to have a useful zoom with ancien games sprites
 
  
=== Bildkombination ===
+
* Median : berechnet den Median der Farben um jedes Pixel herum, macht Ecken weicher
 +
* Pixelate : vereinfacht das Bild durch Rechtecke gleicher Farbe
 +
* Smooth : macht das gesamte Bild weicher, Gegenteil von Sharpen
 +
* Sharpen : verstärkt Konturen, Gegenteil von Smooth
  
PutImage is the basic image drawing function and BlendImage allows to combine images, like layers of image editing softwares. Available modes are the following:
+
* Contour : zeichnet Konturen auf einem weißen Hintergrund (wie eine Bleistiftzeichnung)
*LinearBlend : simple superimposition without gamma correction (equivalent to dmFastBlend)
+
* Emboss : zeichnet Konturen mit Schatten
*Transparent : superimposition with gamma correction
+
* EmbossHighlight : zeichnet Konturen einer Auswahl mit definierten Graustufen
*Multiply : multiplication of color values (with gamma correction)
+
 
*LinearMultiply : multiplication of color values (without gamma correction)
+
* Grayscale : konvertiert Farben in Graustufen mit Gammakorrektur
*Additive : addition of color values (with gamma correction)
+
* Normalize : verwende den vollen Umfang der Luminosität von Farben
*LinearAdd : addition of color values (without gamma correction)
+
 
*Difference : difference of color values (with gamma correction)
+
* Rotate : Drehung des Bildes um einen Punkt
*LinearDifference : difference of color values (without gamma correction)
+
* Sphere : verzerrt das Bild wie in einer Projektion auf eine Kugel
*Negation : makes common colors disappear (with gamma correction)
+
* Twirl : verzerrt das Bild mit einem Strudel-Effekt
*LinearNegation : makes common colors disappear (without gamma correction)
+
* Cylinder : verzerrt das Bild wie in einer Projektion auf einen Zylinder
*Reflect, Glow : for light effects
+
* Plane : berechnet eine hochpräzise Projektion auf eine waagrechte Ebene. Dies ist recht langsam.
*ColorBurn, ColorDodge, Overlay, Screen : misc. filters
+
* SmartZoom3 : vergrößert das Bild 3x und entdeckt Ränder, ein nützlicher Zoom bei alten Spielesprites
*Lighten : keeps the lightest color values
+
 
*Darken : keeps the darkest color values
+
Einige Funktionen scheinen nicht als Filter auf, weil sie kein neu erstelltes Bild zurückliefern. Sie verändern das vorhandene Bild:
*Xor : exclusive or of color values
+
* VerticalFlip : vertikale Spiegelung
 +
* HorizontalFlip : horizontale Spiegelung
 +
* Negative : invertiert die Farben
 +
* LinearNegative : inveriert ohne Gammakorrektur
 +
* SwapRedBlue : tauscht den roten und den blauen Kanal aus (zu Umwandeln von BGRA und RGBA)
 +
* ConvertToLinearRGB : zum Umwandeln von sRGB zu RGB. Beachten Sie: Das von BGRABitmap verwendete Format ist sRGB bei dmDrawWithTransparency und RGB bei dmLinearBlend.
 +
* ConvertFromLinearRGB : konvertiert von RGB zu sRGB.
 +
 
 +
=== Bildüberblendung ===
 +
 
 +
PutImage (= Ersetzen) ist die normale Zeichenfunktion. Im Gegensatz dazu erlaubt es '''BlendImage''', Bilder zu überblenden, wie mittels Ebenen bei kommerziellen Bildbearbeitungsprogrammen. Die folgenden Modi sind verfügbar:
 +
*LinearBlend : einfache Überlagerung ohne Gammakorrektur (äquivalent zu dmFastBlend)
 +
*Transparent : Überlagerung mit Gammakorrektur
 +
*Multiply : Multiplikation von Farbwerten (mit Gammakorrektur)
 +
*LinearMultiply : Multiplikation von Farbwerten (ohne Gammakorrektur)
 +
*Additive : Addition von Farbwerten (mit Gammakorrektur)
 +
*LinearAdd : Addition von Farbwerten (ohne Gammakorrektur)
 +
*Difference : Differenz von Farbwerten (mit Gammakorrektur)
 +
*LinearDifference : Differenz von Farbwerten (ohne Gammakorrektur)
 +
*Negation : löscht gemeinsame Farben (mit Gammakorrektur)
 +
*LinearNegation : löscht gemeinsame Farben (ohne Gammakorrektur)
 +
*Reflect, Glow : Reflexion, Glühen  - für Lichteffekte
 +
*ColorBurn, ColorDodge, Overlay, Screen : verschiedene Filter
 +
*Lighten : Aufhellen - erhält die hellen Farbwerte
 +
*Darken : Abdunkeln - erhält die dunklen Farbwerte
 +
*Xor : ausschließendes Oder von Farbwerten
 +
 
 +
Diese Modi können in TBGRALayeredBitmap benutzt werden, was es etwas vereinfacht, weil BlendImage nur die grundlegenden Überblendungsoperationen bietet.
  
 
=== Screenshots ===
 
=== Screenshots ===
Line 133: Line 182:
 
===Lizenz===
 
===Lizenz===
 
modified LGPL
 
modified LGPL
 +
 +
Autor: [http://johann-elsass.net Johann ELSASS] ([http://www.facebook.com/johann.elsass.1 Facebook])
  
 
===Download===
 
===Download===
Sourceforge with [[LazPaint|LazPaint]] et BGRABitmap : https://sourceforge.net/projects/lazpaint/files/lazpaint/
+
Letzte Version : https://github.com/bgrabitmap/bgrabitmap/releases
  
Old link : http://consume.o2switch.net/lazarus/
+
Paket von Sourceforge enthält [[LazPaint|LazPaint]] : http://sourceforge.net/projects/lazpaint/files/src/ (veraltet max. ver.9.2.2)
  
===Installation===
+
GitHub: https://github.com/bgrabitmap/lazpaint/
Add BGRABitmap and BGRABitmapTypes to the '''uses''' clause.
 

Latest revision as of 13:25, 11 September 2022

Deutsch (de) English (en) español (es) français (fr) русский (ru) 中文(中国大陆)‎ (zh_CN)

bgrabitmap logo.jpg

Siehe auch: Entwickung mit Grafik

Beschreibung

BGRABitmap ist eine Sammlung von Units zum Erzeugen und Modifizieren von Bildern mit Transparenzinformationen (Alphakanal). Der direkte Zugriff auf einzelne Pixels erlaubt eine schnelle Bildbearbeitung. Diese Bibliothek wurde optimiert und getestet unter Windows, Ubuntu und Mac OS X, mit den Schnittstellen win32, gtk1, gtk2 und carbon.

Die Hauptklasse ist TBGRABitmap, die von TFPCustomImage abgeleitet wurde. Es gibt auch eine Klasse TBGRAPtrBitmap, die es erlaubt, bereits allozierte BGRA-Daten zu bearbeiten. Dieses Format besteht aus 4 Bytes pro Pixel (blau, grün, rot und alpha; in dieser Reihenfolge).

Verwendung von BGRABitmap

Tutorial

Overview

Die Funktionen haben lange Namen um verstehbar zu sein. Nahezu Alles ist erreichbar über eine Funktion oder eine Eigenschaft des TBGRABitmap-Objekts. Beispielsweise können Sie CanvasBGRA benutzen, um eine Zeichenfläche ähnlich zu TCanvas (mit Transparenz und Antialiasing) zu erhalten; und mit Canvas2D haben Sie die gleichen Merkmale wie bei HTML canvas.

Einige besondere Merkmale erfordern bestimmte Units, aber möglicherweise benötigen Sie diese nicht:

  • TBGRAMultishapeFiller für antialiasierte Verbindungen bei Polygonen ist in BGRAPolygon
  • TBGRATextEffect ist in BGRATextFX
  • 2D Transformationen sind in BGRATransform
  • TBGRAScene3D ist in BGRAScene3D
  • Falls Sie Ebenen benötigen, bietet Ihnen BGRALayers eine TBGRALayeredBitmap

Die Doppel-Pufferung ist kein Bestandteil von BGRABitmap, weil es dabei mehr um den Umgang mit Forms geht. Um ein Double-buffering zu machen, können Sie TBGRAVirtualScreen aus dem BGRAControls-Package verwenden.

Abgesehen davon, arbeitet die Doppel-Pufferung in BGRABitmap wie gewohnt. Sie benötigen eine Bitmap, wo Sie Ihre Zeichnung speichern, und zeigen diese mit der Einzelanweisung Draw an.

Einfaches Beispiel

Sie kopieren dazu die BGRABitmap-Units und linken sie zu Ihrem Projekt:

Uses 
  Classes, SysUtils, BGRABitmap, BGRABitmapTypes;

Die Unit BGRABitmapTypes enthält alle notwendigen Definitionen, aber Sie können auch einfach eine Variable vom Typ BGRABitmap deklarieren, um eine Bitmap zu laden und anzuzeigen. Dann ist der erste Schritt der, ein TBGRABitmap-Objekt zu erzeugen:

var 
  bmp: TBGRABitmap;
begin
  bmp := TBGRABitmap.Create(100, 100, BGRABlack); // erzeugt ein 100x100 Pixel großes Bild mit schwarzem Hintergrund

  bmp.FillRect(20, 20, 60, 60, BGRAWhite, dmSet); // zeichnet ein weißes Quadrat ohne Transparenz
  bmp.FillRect(40, 40, 80, 80, BGRA(0, 0, 255, 128), dmDrawWithTransparency); // zeichnet ein transparentes blaues Quadrat
end;

Zuletzt wird die Bitmap angezeigt:

procedure TFMain.FormPaint(Sender: TObject);
begin
  bmp.Draw(Canvas, 0, 0, True); // zeichnet die Bitmap im opaquen Modus (schneller)
end;

Anmerkungen

Die Pixels in einer transparenten Bitmap werden in 4 Werten gespeichert, also 4 Bytes in der Reihenfolge Blau, Grün, Rot, Alpha. Der letzte Kanal definiert die Transparenzstufe (0 bedeutet transparent, 255 bedeutet undurchsichtig/opak), die anderen Kanäle definieren die Farbe und die Luminosität.

Grundsätzlich gibt es zwei Zeichenmodi. Der erste besteht darin, die Inhaltsinformation eines Pixels vollständig zu ersetzen. Die zweite besteht darin, das vorhandene Pixel mit einem anderen zu überblenden, das nennt man Alphablending.

Die BGRABitmap-Funktionen bieten dazu 4 Modi an:

  • dmSet : ersetzt die 4 Bytes des gezeichneten Pixels. Die vorhandene Transparenz bleibt nicht erhalten.
  • dmDrawWithTransparency : zeichnet mit Alphablending und mit Gammakorrektur (siehe unten)
  • dmFastBlend oder dmLinearBlend : zeichnet mit Alphablending aber ohne Gammakorrektur (schneller, bewirkt aber Farbverzerrungen bei geringen Intensitäten).
  • dmXor : wendet Xor auf jede Komponente an und enthält Alpha (falls Sie die Farben invertieren wollen, aber Alpha beibehalten, nehmen Sie BGRA(255,255,255,0) )

Integrierte Zeichenfunktionen

  • Zeichnen/Löschen von Pixeln
  • Zeichnen einer Linie mit oder ohne Antialiasing
  • Koordinaten in Fließkommagenauigkeit
  • Stiftbreite in Fließkommagenauigkeit
  • Rechteck (gerahmt oder gefüllt)
  • Ellipse und Polygone mit Antialiasing
  • Spline-Berechnung (abgerundete Kurven)
  • einfache Füllung (Floodfill) oder progressive Füllung
  • Farbverläufe (linear, radial...)
  • abgerundete Rechtecke
  • Texte mit Transparenz

Zeichnen auf der Leinwand

Sie können mit einem Canvas-Objekt zeichnen, mit den üblichen Funktionen, aber ohne Antialiasing. Die Opazität (Undurchsichtbarkeit) der Zeichnung ist durch die Eigenschaft CanvasOpacity definiert. Dieses Verfahren ist langsamer, weil dazu Bildumformungen angewendet werden.

Direkter Zugriff auf ein Pixel

Zur direkten Bearbeitung von Pixels gibt es zwei Eigenschaften, Data und Scanline. Die erste gibt einen Zeiger auf das erste Pixel im Bild zurück, die zweite hingegen einen Zeiger auf das erste Pixel einer bestimmten Zeile.

var 
  bmp: TBGRABitmap;
  p: PBGRAPixel;
  n: integer;

begin
  bmp := TBGRABitmap.Create('image.png');
  p := bmp.Data;
  for n := bmp.NbPixels-1 downto 0 do begin
    p^.red := not p^.red;   // invertiert den roten Kanal
    inc(p);
  end;
  bmp.InvalidateBitmap;     // beachten Sie, dass wir direkt auf die Pixels zugegriffen haben
  bmp.Draw(Canvas, 0, 0, True);
  bmp.Free;
end;

Es ist erforderlich, die Funktion InvalidateBitmap aufzurufen, um das Bild beim nächsten Aufruf von Draw neu zeichnen zu lassen. Beachten Sie: Die Reihenfolge der Zeilen kann auch umgekehrt sein, abhängig von der Eigenschaft LineOrder.

Siehe auch den Vergleich zwischen verschiedenen Methoden des direkten Pixel-Zugriffs.

Bildmanipulation

Verfügbare Filter (mit der Vorsilbe Filter):

  • Radial blur : nicht-direktionale Unschärfe
  • Motion blur : richtungsabhängige Bewegungsunschärfe
  • Custom blur : benutzerdefinierte Unschärfe (verwendet eine Maske)
  • Median : berechnet den Median der Farben um jedes Pixel herum, macht Ecken weicher
  • Pixelate : vereinfacht das Bild durch Rechtecke gleicher Farbe
  • Smooth : macht das gesamte Bild weicher, Gegenteil von Sharpen
  • Sharpen : verstärkt Konturen, Gegenteil von Smooth
  • Contour : zeichnet Konturen auf einem weißen Hintergrund (wie eine Bleistiftzeichnung)
  • Emboss : zeichnet Konturen mit Schatten
  • EmbossHighlight : zeichnet Konturen einer Auswahl mit definierten Graustufen
  • Grayscale : konvertiert Farben in Graustufen mit Gammakorrektur
  • Normalize : verwende den vollen Umfang der Luminosität von Farben
  • Rotate : Drehung des Bildes um einen Punkt
  • Sphere : verzerrt das Bild wie in einer Projektion auf eine Kugel
  • Twirl : verzerrt das Bild mit einem Strudel-Effekt
  • Cylinder : verzerrt das Bild wie in einer Projektion auf einen Zylinder
  • Plane : berechnet eine hochpräzise Projektion auf eine waagrechte Ebene. Dies ist recht langsam.
  • SmartZoom3 : vergrößert das Bild 3x und entdeckt Ränder, ein nützlicher Zoom bei alten Spielesprites

Einige Funktionen scheinen nicht als Filter auf, weil sie kein neu erstelltes Bild zurückliefern. Sie verändern das vorhandene Bild:

  • VerticalFlip : vertikale Spiegelung
  • HorizontalFlip : horizontale Spiegelung
  • Negative : invertiert die Farben
  • LinearNegative : inveriert ohne Gammakorrektur
  • SwapRedBlue : tauscht den roten und den blauen Kanal aus (zu Umwandeln von BGRA und RGBA)
  • ConvertToLinearRGB : zum Umwandeln von sRGB zu RGB. Beachten Sie: Das von BGRABitmap verwendete Format ist sRGB bei dmDrawWithTransparency und RGB bei dmLinearBlend.
  • ConvertFromLinearRGB : konvertiert von RGB zu sRGB.

Bildüberblendung

PutImage (= Ersetzen) ist die normale Zeichenfunktion. Im Gegensatz dazu erlaubt es BlendImage, Bilder zu überblenden, wie mittels Ebenen bei kommerziellen Bildbearbeitungsprogrammen. Die folgenden Modi sind verfügbar:

  • LinearBlend : einfache Überlagerung ohne Gammakorrektur (äquivalent zu dmFastBlend)
  • Transparent : Überlagerung mit Gammakorrektur
  • Multiply : Multiplikation von Farbwerten (mit Gammakorrektur)
  • LinearMultiply : Multiplikation von Farbwerten (ohne Gammakorrektur)
  • Additive : Addition von Farbwerten (mit Gammakorrektur)
  • LinearAdd : Addition von Farbwerten (ohne Gammakorrektur)
  • Difference : Differenz von Farbwerten (mit Gammakorrektur)
  • LinearDifference : Differenz von Farbwerten (ohne Gammakorrektur)
  • Negation : löscht gemeinsame Farben (mit Gammakorrektur)
  • LinearNegation : löscht gemeinsame Farben (ohne Gammakorrektur)
  • Reflect, Glow : Reflexion, Glühen - für Lichteffekte
  • ColorBurn, ColorDodge, Overlay, Screen : verschiedene Filter
  • Lighten : Aufhellen - erhält die hellen Farbwerte
  • Darken : Abdunkeln - erhält die dunklen Farbwerte
  • Xor : ausschließendes Oder von Farbwerten

Diese Modi können in TBGRALayeredBitmap benutzt werden, was es etwas vereinfacht, weil BlendImage nur die grundlegenden Überblendungsoperationen bietet.

Screenshots

Lazpaint contour.png Lazpaint curve redim.png Bgra wirecube.png Bgra chessboard.jpg

Lizenz

modified LGPL

Autor: Johann ELSASS (Facebook)

Download

Letzte Version : https://github.com/bgrabitmap/bgrabitmap/releases

Paket von Sourceforge enthält LazPaint : http://sourceforge.net/projects/lazpaint/files/src/ (veraltet max. ver.9.2.2)

GitHub: https://github.com/bgrabitmap/lazpaint/