Как бороться с переполнением ColorMatrix?

Прежде чем я начну здесь, я использую C#. Я хотел бы сделать некоторые преобразования, используя класс ColorMatrix. Проблема в том, что иногда происходит переполнение для r, g или b. Вместо того, чтобы зафиксировать значение на уровне 255, матрица зацикливается и снова начинается с 0. Это означает, что для изображений, которые должны казаться полностью белыми, они снова начинают становиться черными. Я использую это для моделирования интенсивности с разной линейной скоростью для камер с линейным сканированием. Кто-нибудь знает способ обойти это?

Кстати, у меня есть другие другие методы, и я мог бы сам выполнять матричные преобразования, но меня больше интересует решение этой конкретной проблемы (если оно, конечно, есть).


person Ed S.    schedule 24.02.2009    source источник


Ответы (1)


Я тоже столкнулся с этой проблемой, и было бы неплохо, если бы кто-нибудь знал об исправлении. Я прибегал к уродливым обходным путям, таким как:

        float[][] matrixContrastFix =
        {
            new float[] {    1,     0,     0, 0, 0},
            new float[] {    0,     1,     0, 0, 0},
            new float[] {    0,     0,     1, 0, 0},
            new float[] {    0,     0,     0, 1, 0}, 
            new float[] {-.05f, -.05f, -.05f, 0, 1}
        };

(Я перемножаю множество цветовых матриц и в конце концов получаю эти вещи.)

Но, как я предполагаю, вы имеете в виду под другими методами, лучше использовать .LockBits и делать это самостоятельно.

Надеюсь, вы получите лучший ответ, чем мой!

person Dan Byström    schedule 24.02.2009
comment
Ага, решил сам просканировать память. Спасибо. - person Ed S.; 24.02.2009