BGRABitmap/de
│
Deutsch (de) │
English (en) │
español (es) │
français (fr) │
русский (ru) │
中文(中国大陆) (zh_CN) │
Siehe auch: Developing with Graphics
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.
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).
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 3 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).
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 (ohne Antialiasing)
- 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.
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
Bildkombination
PutImage is the basic image drawing function and BlendImage allows to combine images, like layers of image editing softwares. Available modes are the following:
- LinearBlend : simple superimposition without gamma correction (equivalent to dmFastBlend)
- Transparent : superimposition with gamma correction
- Multiply : multiplication of color values (with gamma correction)
- LinearMultiply : multiplication of color values (without gamma correction)
- Additive : addition of color values (with gamma correction)
- LinearAdd : addition of color values (without gamma correction)
- Difference : difference of color values (with gamma correction)
- LinearDifference : difference of color values (without gamma correction)
- Negation : makes common colors disappear (with gamma correction)
- LinearNegation : makes common colors disappear (without gamma correction)
- Reflect, Glow : for light effects
- ColorBurn, ColorDodge, Overlay, Screen : misc. filters
- Lighten : keeps the lightest color values
- Darken : keeps the darkest color values
- Xor : exclusive or of color values
Screenshots
Lizenz
modified LGPL
Download
Sourceforge with LazPaint et BGRABitmap : https://sourceforge.net/projects/lazpaint/files/lazpaint/
Old link : http://consume.o2switch.net/lazarus/
Installation
Add BGRABitmap and BGRABitmapTypes to the uses clause.