Comment utiliser ColorMatrix dans .NET pour modifier la luminosité, la couleur, la saturation et la teinte

StackOverflow https://stackoverflow.com/questions/4888503

Question

J'ai un type 'Bitmap' contenant des données bitmap aléatoires.J'ai écrit mes propres ajustements pour la luminosité, la couleur, la saturation et la teinte qui agissent individuellement sur chaque bit et, sans surprise, c'est terriblement lent.

Dans mes recherches, j'ai remarqué que l'utilisation de matrices peut être très rapide pour les ajuster.De plus, .NET a un ColorMatrix où vous pouvez appliquer les effets de matrice lorsque vous DrawImage ().

La matrice que nous avons configurée ressemble à la suivante (à partir du site Web MSDN):

float[][] colorMatrixElements = { 
new float[] {2,  0,  0,  0, 0},        // red scaling factor of 2
new float[] {0,  1,  0,  0, 0},        // green scaling factor of 1
new float[] {0,  0,  1,  0, 0},        // blue scaling factor of 1
new float[] {0,  0,  0,  1, 0},        // alpha scaling factor of 1
new float[] {.2f, .2f, .2f, 0, 1}};    // three translations of 0.2

Mais je n'ai pas été en mesure de trouver des plages appropriées ou ce que font exactement l'un de ces nombres.Je ne sais pas comment régler la luminosité, la couleur, la saturation et la teinte.

Une aide ??Est-ce que je manque une bonne documentation quelque part?

Merci !!

Était-ce utile?

La solution

Vous trouverez quelques détails sur http://www.graficaobscura.com/matrix/index.html, mais vous souhaiterez peut-être publier votre autre code.Faire des opérations par pixel est très courant et vous ne rencontrerez généralement pas de problèmes de performances pour ce type d'opération.Bitmap.SetPixel de .NET est notoirement lent.Il existe une bonne série de traitement d'images C # chez codeproject montrant une méthode plus rapide.Je n'ai pas d'expérience avec c ++ - cli mais je vais y jeter un œil.

Autres conseils

Il y a des limites à ce que vous pouvez faire avec une matrice de couleurs.

Fondamentalement, la matrice que vous fournissez est en fait une transformation homogène à 4 dimensions.C'est un grand mot qui signifie que vous pouvez faire pivoter, redimensionner, traduire les différents canaux (R G B A) de votre couleur.

Voir Matrice de transformation pour plus de détails.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top