Difference between revisions of "BGRABitmap/de"

From Free Pascal wiki
Jump to navigationJump to search
m (→‎Anmerkungen: updated)
Line 44: Line 44:
 
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===

Revision as of 22:19, 17 November 2011

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).

Tutorial

Gehen Sie zum Tutorial.

Weitere Beispiele gibt es auch im Verzeichnis 'testbgrafunc' der LazPaint Archive (siehe im Abschnitt Download).

Verwendung von BGRABitmap

Sie kopieren dazu die BGRABitmap-Units und linken sie zu Ihrem Projekt: <delphi> Uses Classes, SysUtils, BGRABitmap, BGRABitmapTypes; </delphi>

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> 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; </delphi>

Zuletzt wird die Bitmap angezeigt: <delphi> procedure TFMain.FormPaint(Sender: TObject); begin

 bmp.Draw(Canvas, 0, 0, True); // zeichnet die Bitmap im opaquen Modus (schneller)

end; </delphi>

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.

<delphi> 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; </delphi>

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:

  • 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
  • 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
  • SmartZoom3 : vergrößert das Bild 3x und entdeckt Ränder, ein nützlicher Zoom bei alten Spielesprites

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

Screenshots

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

Lizenz

modified LGPL

Download

Paket von Sourceforge enthält LazPaint und BGRABitmap : https://sourceforge.net/projects/lazpaint/files/lazpaint/

Alter Link : http://consume.o2switch.net/lazarus/

Installation

Fügen Sie der uses-Klausel die Units BGRABitmap und BGRABitmapTypes hinzu.