Как бороться с переполнением ColorMatrix? - PullRequest
2 голосов
/ 24 февраля 2009

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

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

1 Ответ

2 голосов
/ 24 февраля 2009

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

        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}
        };

(Я умножаю множество ColorMatrixes вместе и в итоге получаю эти вещи.)

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

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

...