crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> QImage Яркость и контрастность
Nof1000
  опции профиля:
сообщение 15.11.2011, 20:26
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 2
Регистрация: 15.11.2011
Пользователь №: 3003

Спасибо сказали: 0 раз(а)




Репутация:   0  


Всем привет, возник вопрос как изменить яркость и контрастность, сначала думал в сторону QPixmap но потом все копнув информации,
Понял что лучше для этого подойдет QImage пытался сделать что-то свое, но так и ничего путного не вышло,
Поискав так скажем функционал для этого, наткнулся на вот это Тыц

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

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


Но в результате контрастность в любом случаи не максимальна,
В моем случаи очень важно задать яркость и контрастность в минимальное и максимальное значение.
Поискав в интернетах так и не нашел ничего.
И вот решил задать вопрос:
Куда мне копать или смотреть чтобы реализовать свой вариант?
Может если уже готовые варианты но только так скажем более функциональные чем тот что выше.
Или же все проще и данный функционал есть в самом Qt?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов (1 - 3)
ilyabvt
  опции профиля:
сообщение 16.11.2011, 13:30
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 297
Регистрация: 23.6.2011
Пользователь №: 2765

Спасибо сказали: 45 раз(а)




Репутация:   3  


http://doc.qt.nokia.com/latest/qcolor.html#lighter
Вот эта функция по идее должна менять яркость цвета.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Nof1000
  опции профиля:
сообщение 16.11.2011, 19:21
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 2
Регистрация: 15.11.2011
Пользователь №: 3003

Спасибо сказали: 0 раз(а)




Репутация:   0  


Пока сделал вариант топор
    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
  опции профиля:
сообщение 17.11.2011, 8:52
Сообщение #4


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


я бы не мучился, если картинки небольшие то можно сделать так
//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 пространстве, и если ты хочешь интерактивно обрабатывать ее, то должен держать оригинал который хочешь обрабатывать отдельно и на каждой итерации применять метод к копии данной картинки с новым параметром иначе результат не будет удовлетворять твоим ожиданиям.:)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 4.12.2024, 22:54