Developpez.com - Rubrique Pascal

Le Club des Développeurs et IT Pro

La bibliothèque BGRABitmap pour Lazarus

Dessin avec transparence et antialiasing, par Johann Elsass

Le 2010-03-30 13:04:18, par circular17, Membre confirmé
Découvrez la bibliothèque BGRABitmap pour Lazarus
Dessin avec transparence et antialiasing

Ne trouvant pas de moyen pratique pour faire du dessin avec accès direct aux pixels et de la transparence, j'ai fait une bibliothèque qui permet d'utiliser des images 32-bits BGRA (blue vert rouge alpha dans cet ordre) et de les dessiner directement à l'écran.

La bibliothèque BGRABitmap a pour but de permettre un dessin avec antialiasing, de contrôler la transparence, de fusionner des couches, ajouter des effets...

Le tutoriel suivant propose de faire le tour des fonctionnalités de cette bibliothèque :
http://lazarus.developpez.com/cours/bgrabitmap/

La page de téléchargement :
http://pascal.developpez.com/telecharger/detail/id/433/Bibliotheque-BGRABitmap

J'ai rajouté une page sur le wiki de Lazarus :
http://wiki.freepascal.org/BGRABitmap/fr

Qu'en pensez-vous ?
  Discussion forum
24 commentaires
  • circular17
    Membre confirmé
    Rebonjour,

    J'ai écrit un tutorial en anglais pour BGRABitmap.

    Il montre comment charger et redimensionner des images, utiliser l'accès direct aux pixels, cominer des layers, remplir avec des gradients, utiliser des styles de lignes et des splines, générer des textures avec du bruit de Perlin et faire des effets de lumière Phong.

    Chaque tuto est accompagnié de screenshots

    http://wiki.lazarus.freepascal.org/B...itmap_tutorial

    L'adresse de téléchargement de BGRABitmap a changé, à présent c'est ici :
    http://sourceforge.net/projects/lazpaint/

    Je vais probablement faire une traduction française, et, pourquoi pas, on pourrait le mettre sur developpez.net.
  • circular17
    Membre confirmé
    Bonjour zeroboam,

    Content de voir que vous vous intéressez a la bibliothèque.

    Effectivement, BGRABitmap n'est pas a installer. Il suffit de l'ajouter au projet ("ajouter" depuis l'inspecteur de projet ou bien le menu "ajouter au paquet" depuis la fenêtre de paquet BGRABitmap).

    L'erreur de compilation 2012090607 a été résolue sur SVN, et je viens de faire pour vous un zip, numéroté version 8.8:
    https://sourceforge.net/projects/laz...int/files/src/

    Cordialement
  • tourlourou
    Modérateur
    La bibliothèque est intégrée dans la distribution CodeTyphon basée sur Lazarus.
  • circular17
    Membre confirmé
    Effectivement, la largeur du texte est obtenue par la fonction TextSize qui renvoit une structure TSize qui contient les champs cx et cy. Cette fonction ne prend pas en compte les retours a la ligne, c'est-a-dire qu'elle renvoie la mesure pour le dessin avec TextOut, mais pas avec TextRect.

    Concernant la mesure verticale, il y a egalement la propriété FontPixelMetric qui renvoie la position des différentes lignes horizontales (le haut des majuscules, le haut des minuscules, la ligne sur laquelle repose les lettres, etc.).

    Dans les dernieres version de la bibliotheque, on peut définir la propriété FontVerticalAnchor pour choisir la position verticale relative du texte. Par défaut, la coordonnée (x,y) transmise en parametre aux fonctions de texte spécifie le coin haut-gauche, mais on peut choisir par exemple que y spécifie la ligne sur laquelle repose les lettres en faisant FontVerticalAnchor := fvaBaseline.
  • circular17
    Membre confirmé
    Oui tu peux charger des PNG, les modifier et les sauvegarder. J'ai mis une propriété Scanline pour accéder directement aux pixels.

    Voilà un screenshot (sachant que ça donne la même chose avec Ubuntu et Linux) :
  • circular17
    Membre confirmé
    Voilà la traduction du tutoriel en français est faite :

    http://wiki.lazarus.freepascal.org/B...ap_tutorial/fr
  • circular17
    Membre confirmé
    Le tutoriel est maintenant disponible sur developpez.net :
    http://lazarus.developpez.com/cours/bgrabitmap/
  • circular17
    Membre confirmé
    Oui. La propriété FillMode peut prendre la valeur fmWinding ou fmAlternate.

    EDIT: Je viens de publier la dernière version qui inclut une propriété CanvasBGRA contenant les mêmes fonctions que le canvas standard, avec l'antialiasing et la transparence (propriété Opacity de Pen, Font et Brush).
  • circular17
    Membre confirmé
    BGRAControls est un paquet de contrôles (boutons etc.) qui utilisent BGRABitmap. Plus d'information sur ce paquet :
    http://wiki.lazarus.freepascal.org/BGRAControls

    Le contrôle BGRAVirtualScreen permet de dessiner sur un écran virtuel, en évitant ainsi le clignotement et avec simplicité.

    peut-on réaliser des programmes de traitement d'images (couleur, dessin, géométrie) avec les unités figurant dans le fichier "bgrabitmap4.6.1.zip" ?
    Bien entendu.

    Par exemple LazPaint utilise cette bibliothèque :
    https://sourceforge.net/projects/lazpaint/files/

    Pour résumer il y a :
    - une bibliothèque de dessin BGRABitmap
    - une bibliothèque de contrôles BGRAControls
    - un logiciel d'édition d'image LazPaint

    Enfin, de façon indépendante est développée une autre bibliothèque de contrôles (uEControls) utilisant aussi BGRABitmap :
    http://www.lazarus.freepascal.org/in....msg71343.html
  • circular17
    Membre confirmé
    BGRAText et BGRATextFX font partie de la librairie BGRABitmap.