Couleur d’un pixel dans un TBitmap

Dans cet article, nous allons voir comment changer la couleur des pixels dans un Fmx::Graphics::TBitmap.

Pour cela, on va utiliser une image PNG qui possède seulement deux couleurs: du blanc et du noir.
Cœur

Tout d’abord, il faut créer un projet FireMonkey dans lequel il faut ajouter un composant TImage.

Ensuite, il faut ajouter le fichier d’en-tête suivant pour utiliser TAlphaColorArray:

#include <FMX.Utils.hpp>

Par la suite, vous pouvez ajouter ce code dans le constructeur de la Form.

Fmx::Graphics::TBitmap* LBitmap = NULL;
try
{
    LBitmap = new Fmx::Graphics::TBitmap("C:\\images\\heart.png");
 
    TBitmapData LBitmapData;
    if(LBitmap->Map(TMapAccess::ReadWrite, LBitmapData))
    {
        try
        {
            TAlphaColorArray* LColorArray;
            for(int y = 0; y < LBitmapData.Height; ++y)
            {
                LColorArray = static_cast<TAlphaColorArray*>
                    (LBitmapData.GetScanline(y));
                for(int x = 0; x < LBitmapData.Width; ++x)
                {
                    void* LPixel = &LColorArray->data[x];
                    const System::Uitypes::TAlphaColor LColor =
                        PixelToAlphaColor(LPixel, LBitmapData.PixelFormat);
                    if(LColor == TAlphaColorRec::White)
                    {   // Change le blanc en rouge
                        AlphaColorToPixel(TAlphaColorRec::Red,
                            LPixel, LBitmapData.PixelFormat);
                    }
                    else if(LColor == TAlphaColorRec::Black)
                    {   // Change le noir en violet
                        AlphaColorToPixel(TAlphaColorRec::Violet,
                            LPixel, LBitmapData.PixelFormat);
                    }
                }
            }
        }
        __finally
        {
            LBitmap->Unmap(LBitmapData);
        }
    }
 
    Image1->Bitmap->Assign(LBitmap);
}
__finally
{
    delete LBitmap;
}

Voilà, maintenant vous devriez obtenir ceci à l’exécution:

Résultat changement de couleur