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