Как использовать ColorMatrix в .NET для изменения яркости, цвета, насыщенности, оттенка - PullRequest
3 голосов
/ 03 февраля 2011

У меня есть тип «Растровое изображение», содержащий некоторые случайные данные растрового изображения. Я написал свои собственные настройки яркости, цвета, насыщенности и оттенка, которые влияют на каждый бит по отдельности и, что неудивительно, это ужасно медленно.

В своем исследовании я заметил, что с помощью матриц можно очень быстро их корректировать. Кроме того, в .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 ]

4 голосов
/ 03 февраля 2011

Есть некоторые подробности на http://www.graficaobscura.com/matrix/index.html, но вы можете разместить свой другой код.Выполнение операций для каждого пикселя очень распространено, и вы обычно не сталкиваетесь с проблемами производительности для такого рода операций..NET Bitmap.SetPixel известен своей медлительностью.В кодпроекте есть хорошая серия обработки изображений C # , показывающая более быстрый метод.У меня нет опыта работы с c ++ - cli, но я посмотрю.

1 голос
/ 03 февраля 2011

Существуют ограничения на то, что вы можете делать с цветовой матрицей.

По сути, матрица, которую вы предоставляете, на самом деле является гомогенным преобразованием четырех измерений. Это большое слово, означающее, что вы можете вращать, масштабировать, переводить различные каналы (R G B A) вашего цвета.

Подробнее см. Матрица преобразования .

...