Salut, le mieux c'est d'utiliser des images qui contiennent déja un channel alpha ( PNG ) ça évite de manipuler les matrices, ce qui est compliqué et sûrement couteux en temps CPU.
Bitmap bmp0 = new Bitmap( 640, 480, PixelFormat.Format32bppArgb );
Bitmap bmp1 = Properties.Resources._01;
Bitmap bmp2 = Properties.Resources._02;
Bitmap bmp3 = Properties.Resources._03;
float[ ][ ] matrix =
{
new float[ ] { 1.0f, 0.0f, 0.0f, 0.0f, 0.0f },
new float[ ] { 0.0f, 1.0f, 0.0f, 0.0f, 0.0f },
new float[ ] { 0.0f, 0.0f, 1.0f, 0.0f, 0.0f },
new float[ ] { 0.0f, 0.0f, 0.0f, 0.5f, 0.0f },
new float[ ] { 0.0f, 0.0f, 0.0f, 0.0f, 1.0f }
};
ImageAttributes imageAttributes = new ImageAttributes( );
imageAttributes.SetColorMatrix( new ColorMatrix( matrix ) );
using ( Graphics g = Graphics.FromImage( bmp0 ) )
{
g.DrawImage( bmp1, 0, 0, bmp0.Width, bmp0.Height );
g.CompositingMode = CompositingMode.SourceOver;
g.CompositingQuality = CompositingQuality.HighQuality;
g.DrawImage( bmp2, new Rectangle( 0, 0, bmp0.Width, bmp0.Height ),
0, 0, bmp2.Width, bmp2.Height, GraphicsUnit.Pixel, imageAttributes );
g.DrawImage( bmp3, new Rectangle( 0, 0, bmp0.Width, bmp0.Height ),
0, 0, bmp3.Width, bmp3.Height, GraphicsUnit.Pixel, imageAttributes );
}
this.BackgroundImage = bmp0;
this.BackgroundImageLayout = ImageLayout.Center;