Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: QImage Яркость и контрастность
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Мультимедиа
Nof1000
Всем привет, возник вопрос как изменить яркость и контрастность, сначала думал в сторону QPixmap но потом все копнув информации,
Понял что лучше для этого подойдет QImage пытался сделать что-то свое, но так и ничего путного не вышло,
Поискав так скажем функционал для этого, наткнулся на вот это Тыц

Решил попробовать.

img = changeBrightness(img, -100); // Задаем яркость в самый минимум
img = changeContrast(img, 500) // Задаем контрастность в максимум


Но в результате контрастность в любом случаи не максимальна,
В моем случаи очень важно задать яркость и контрастность в минимальное и максимальное значение.
Поискав в интернетах так и не нашел ничего.
И вот решил задать вопрос:
Куда мне копать или смотреть чтобы реализовать свой вариант?
Может если уже готовые варианты но только так скажем более функциональные чем тот что выше.
Или же все проще и данный функционал есть в самом Qt?
ilyabvt
http://doc.qt.nokia.com/latest/qcolor.html#lighter
Вот эта функция по идее должна менять яркость цвета.
Nof1000
Пока сделал вариант топор
    for( int w = 0; w < img.rect().right(); w++ ) {
        for( int h = 0; h < img.rect().bottom(); h++ ) {
            QColor col( img.pixel(w,h) );
            int r;
            int g;
            int b;
            int realcen = 250;
            col.setHsv(col.hue(), 0, col.value(), col.alpha());
            col.getRgb(&r, &g, &b);
            if (r <= realcen || g <= realcen || b <= realcen)
                col.setRgb(0,0,0);
            if (r > realcen || g > realcen || b > realcen)
                col.setRgb(255,255,255);
            img.setPixel(w,h,col.rgb());
        }
    }

Сначала делаем изображение черно белым а потом уже, ммм так скажем имитируем максимальную контрастность.
Хоть и работает, но все равно не то что надо...
wiz29
я бы не мучился, если картинки небольшие то можно сделать так
//QImage img; some input image with resulution (w, h)
//int lightness; 0 - 0 %; 255 - 100%
void setImageLightness(QImage& img, int lightness)
{
    int w = img.width();
    int h = img.height();
    for (int y = 0; y < h; ++y)
    {
        for(int x = 0; x < w; ++x)
        {
            QColor pixel = image.pixel(x, y);
            pixel.setHsl(pixel.hue(), pixel.saturation(), lightness, pixel.alpha());
            image.setPixel(x, y, pixel.rgba());
        }
    }
}

для контраста аналогично.
код не пробовал собирать, но думаю должно работать.

только не забывай, что картинка хранится не в hsl пространстве, и если ты хочешь интерактивно обрабатывать ее, то должен держать оригинал который хочешь обрабатывать отдельно и на каждой итерации применять метод к копии данной картинки с новым параметром иначе результат не будет удовлетворять твоим ожиданиям.:)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.