BGRABitmap/fr
Voir aussi : Développer en mode graphique
Description
BGRABitmap est un ensembles d'unités permettant de modifier et de créer des images avec transparence (canal alpha). L'accès direct aux pixels permet de faire des traitements rapides sur les images. La bibliothèque a été optimisée et testée sur Windows et Ubuntu, c'est-à-dire avec les widgets win32 et gtk2.
La classe principale est TBGRABitmap qui est dérivée de TFPCustomImage qui permet de créer et dessiner une image. Il y aussi TBGRAPtrBitmap qui est permet de modifier les données déjà alloués d'une image au format BGRA. Ce format consiste en quatre octets pour chaque pixel (bleu, vert, rouge et alpha dans cet ordre).
Utilisation
Il faut copier les unités de BGRABitmap et les lier au projet : <delphi> Uses Classes, SysUtils, BGRABitmap, BGRABitmapTypes; </delphi>
L'unité BGRABitmapTypes contient des définitions nécessaires la plupart du temps, mais on peut déclarer seulement BGRABitmap pour simplement charger et afficher une image. Ensuite, il faut créer un objet TBGRABitmap : <delphi> var bmp: TBGRABitmap; begin
bmp := TBGRABitmap.Create(100,100,BGRABlack); //création d'une image de 100x100 pixels avec un fond noir
bmp.FillRect(20,20,60,60,BGRAWhite, dmSet); //dessine un carré blanc sans transparence bmp.FillRect(40,40,80,80,BGRA(0,0,255,128), dmDrawWithTransparency); //dessine un carré bleu transparent
end; </delphi>
Enfin, pour afficher l'image : <delphi> procedure TFMain.FormPaint(Sender: TObject); begin
bmp.Draw(Canvas, 0, 0, True); // dessine l'image sur la fenêtre en mode opaque (plus rapide)
end; </delphi>
Notions
Les pixels d'une image avec transparence sont stockées avec quatre valeurs, ici des octets, dans l'ordre Bleu, Vert, Rouge, Alpha. Le dernier canal définit le niveau d'opacité (0 signifie transparent, 255 signifie opaque), et les autres canaux définissent la couleur.
On peut distinguer deux modes de dessins. Le premier Le deuxième consiste à effectuer un mélange entre le pixel déjà présent et celui qu'on dessine, ce qui appelé alpha blending.
Les fonctions de BGRABitmap proposent essentiellement 3 modes :
- dmSet : consiste à remplacer les 4 octets par le pixel qu'on dessine, c'est-à-dire qu'on ne gère pas la transparence.
- dmDrawWithTransparency : effectue un mélange en prenant en compte la correction gamma (voir plus bas).
- dmFastBlend ou dmLinearBlend : effectue un mélange sans correction gamma (plus rapide, mais entraine des distorsions notamment avec les couleurs sombres).
Fonctions de dessin intégrées
- dessiner/effacer des pixels
- dessin de lignes avec ou sans antialiasing
- coordonnées avec virgule flottante
- choix de l'épaisseur du pinceau avec virgule flottante
- dessin de rectangle (contour ou remplissage)
- dessin d'ellipse et de polygones avec antialiasing
- calcul de spline (courbe arrondie passant par des points)
- remplissage simple (Floodfill) ou progressif
- rendu de gradient de couleur (linéaire, radial...)
- rectangles avec coins arrondis (sans antialiasing)
- textes avec transparence
Dessin en accès direct aux pixels
Pour accéder aux pixels, il y a deux propriétés, Data et Scanline. La première renvoie un pointeur sur le premier pixel de l'image, et la seconde un pointeur sur le premier pixel d'une ligne donnée.
<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; //inverse le canal rouge inc(p); end; bmp.InvalidateBitmap; //note qu'on a accédé directement aux pixels bmp.Draw(Canvas,0,0,True); bmp.Free;
end; </delphi>
Il est nécessaire d'appeler ensuite la fonction InvalidateBitmap pour reconstruire l'image lors d'un appel à Draw par exemple. Notez que l'ordre les lignes peut être à l'envers, selon la propriété LineOrder.
Dessiner avec le Canvas
Il est possible de dessiner à l'aide d'un Canvas avec les fonctions habituelles. L'opacité du tracé fait avec le Canvas est définie par la propriété CanvasOpacity. Cette façon est un peu lente parce qu'elle nécessite des transformations de l'image.
Captures d'écran
Licence
LGPL modifiée
Téléchargement
Sourceforge avec LazPaint et BGRABitmap : https://sourceforge.net/projects/lazpaint/files/lazpaint/
Ancien lien : http://consume.o2switch.net/lazarus/
Installation
Ajouter BGRABitmap et BGRABitmapTypes à la clause uses.