Outils pour utilisateurs

Outils du site


c:csharp:colormatrix

Matrice de couleur

La matrice de couleur (ColorMatrix) est une classe du framework .Net permettant d'appliquer à tous les pixels d'une image une transformation dans au sein de leur espace de couleur (RGBAW).

Variation de teinte (rotation matricielle)

Pour faire une variation de la teinte (variation dans l'espace HSL sans toucher à la saturation ni à la luminosité), il faut effectuer une rotation autour de l'axe 0_0_0_1_1_1 dans l'espace RGB. Pour cela :

|h Rotation de couleur dans un espace RGB
private void RotateColors(Bitmap image, float degrees)
{
	ImageAttributes imageAttributes = new ImageAttributes();
	int width = image.Width;
	int height = image.Height;
	double r = degrees * System.Math.PI / 180; // degrees to radians
	float cosR = (float)Math.Cos(r);
	float sinR = (float)Math.Sin(r);
	float a = (1 + 2 * cosR) / 3;
	float b = ((1 - cosR) - (float)Math.Sqrt(3) * sinR) / 3;
	float c = ((1 - cosR) + (float)Math.Sqrt(3) * sinR) / 3;
 
	float[][] colorMatrixElements = { 
		new float[] {a, b, c, 0, 0},
		new float[] {c, a, b, 0, 0},
		new float[] {b, c, a, 0, 0},
		new float[] {0, 0, 0, 1, 0},
		new float[] {0, 0, 0, 0, 1}};
 
	ColorMatrix colorMatrix = new ColorMatrix(colorMatrixElements);
 
	imageAttributes.SetColorMatrix(
	   colorMatrix,
	   ColorMatrixFlag.Default,
	   ColorAdjustType.Bitmap);
 
	using (Graphics g = Graphics.FromImage(image))
	{
		g.DrawImage(
		   image,
		   new Rectangle(0, 0, width, height),  // destination rectangle 
			0, 0,        // upper-left corner of source rectangle 
			width,       // width of source rectangle
			height,      // height of source rectangle
			GraphicsUnit.Pixel,
		   imageAttributes);
	}
}

Note : code reprit de l'article Anime Girl Generator et espace colorimetrique

c/csharp/colormatrix.txt · Dernière modification: le 22/02/2013 à 16:13 de Yosko