如何在.NET中使用ColorMatrix来更改亮度,颜色,饱和度,色调

时间:2011-02-03 16:06:52

标签: .net c++-cli bitmap colormatrix

我有一个包含一些随机位图数据的'Bitmap'类型。我已经为亮度,颜色,饱和度和色调编写了自己的调整,单独作用于每个位,毫不奇怪,它的速度非常慢。

在我的研究中,我注意到使用矩阵可以非常快速地调整这些。此外,.NET有一个ColorMatrix,您可以在DrawImage()时应用矩阵效果。

我们设置的矩阵如下所示(来自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

但我无法找到合适的范围或这些数字究竟是什么。我不知道如何调整亮度,颜色,饱和度和色调。

任何帮助?我在某个地方遗漏了一些好的文件吗?

谢谢!

2 个答案:

答案 0 :(得分:4)

http://www.graficaobscura.com/matrix/index.html上有一些详细信息,但您可能希望发布其他代码。按像素执行操作非常常见,您通常不会遇到此类操作的性能问题。 .NET的Bitmap.SetPixel非常慢。代码项目中有一个很好的C# image processing series显示更快的方法。我没有c ++ - cli的经验,但我会看看。

答案 1 :(得分:1)

使用色彩矩阵可以做些什么。

基本上,您提供的矩阵实际上是一个同质的4维变换。这是一个很大的词,意味着你可以旋转,缩放,翻译你的颜色的不同通道(R G B A)。

有关详细信息,请参阅Transformation Matrix