Difference between revisions of "BGRABitmap/fr"

From Free Pascal wiki
Jump to navigationJump to search
(→‎Description: utilisation, notions)
Line 2: Line 2:
  
 
===Description===
 
===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 version standard devrait marcher sur toutes les plateformes que Lazarus propose. La bibliothèque a été optimisée et testée sur Windows et Ubuntu, c'est-à-dire avec les widgets win32 et gtk2.
+
'''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).
 
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).
  
Il y a trois modes de dessins :
+
===Utilisation===
* Dessiner avec alpha blending, c'est-à-dire un image avec gestion de la transparence
+
Il faut copier les unités de BGRABitmap et les lier au projet :
* Remplacer des pixels y compris le canal alpha. Vous pouvez ainsi dessiner un trou dans l'image.
+
<delphi>
* Dessiner une image sauf les pixels transparents (comme un sprite)
+
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).
 +
 
 +
===Fonctionalités===
  
 
Il est possible de dessiner avec des fonctions qui modifient directement l'image en mémoire, qui sont inclues dans la classe ''TBGRABitmap'', mais aussi de dessiner à l'aide d'un ''Canvas'' avec les fonctions habituelles. La seconde option est un peu plus lente parce qu'elle nécessite des transformations de l'image. L'opacité du tracé fait avec le ''Canvas'' est définie par la propriété ''CanvasOpacity''.
 
Il est possible de dessiner avec des fonctions qui modifient directement l'image en mémoire, qui sont inclues dans la classe ''TBGRABitmap'', mais aussi de dessiner à l'aide d'un ''Canvas'' avec les fonctions habituelles. La seconde option est un peu plus lente parce qu'elle nécessite des transformations de l'image. L'opacité du tracé fait avec le ''Canvas'' est définie par la propriété ''CanvasOpacity''.

Revision as of 03:14, 14 February 2011

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

Fonctionalités

Il est possible de dessiner avec des fonctions qui modifient directement l'image en mémoire, qui sont inclues dans la classe TBGRABitmap, mais aussi de dessiner à l'aide d'un Canvas avec les fonctions habituelles. La seconde option est un peu plus lente parce qu'elle nécessite des transformations de l'image. L'opacité du tracé fait avec le Canvas est définie par la propriété CanvasOpacity.

Les fonctions de dessins directes :

  • pixels, lignes, rectangles
  • lignes avec anti-aliasing
  • rectangles avec coins arrondis
  • textes avec transparence
  • remplissage (flood fill), remplacer une couleur
  • charger et sauver des images
  • rééchantillonner, fusionner des images

Pour accéder aux pixels utilisez les propriétés Data et Scanline. 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.

Captures d'écran

Bgra wirecube.png Bgra chessboard.jpg

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.