Дипломная работа: Разработка программного обеспечения для фильтрации растровых изображений
Изменение яркости заключается в изменении интенсивности цвета всех пикселов на заданное значение. Данное преобразование является точечным. Для его реализации добавим в программу класс CBrightCont, производный от класса CDotFilter. Интерфейс класса приведён в листинге 3.6.1
Листинг 3.6.1 – Интерфейс класса CBrightCont. Файл Filter.h
// Яркость/контраст
class CBrightCont: public CDotFilter
{
public:
BOOL Init(int b_offset, int c_offset);
};
Переменные b_offset, c_offset – это объекты, связанные с ползунками, могут принимать положительные и отрицательные значения, что соответствует увеличению или уменьшению яркости/контрастности изображения.
Реализация метода CBrightCont::Init() приведена в листинге 3.6.2 Этот метод инициализирует таблицы преобразования. Сначала выполняется смещение яркости на заданную величину, а затем либо "сжатие", либо "растяжение" диапазона яркости. Причем при сжатии значения яркости изменяются не равномерно, а пропорционально их удаленности от "серой середины", определенной константой CONTRAST_MEDIAN. После преобразования яркости работа по коррекции контрастности происходит со значениями таблицы преобразования, полагая при этом, что они являются индексами в таблице, полученной после коррекции яркости.
Листинг 3.6.2 – Метод CBrightCont::Init().Файл Filter.cpp
// "Серая середина" –уровень 159
#define CONTRAST_MEDIAN 159
BOOL CBrightCont::Init(int b_offset, int c_offset)
{int i=0,//Индекс цвета в таблице преобразований
t=0,//Индекс таблицы
//Индекс цвета, соответствующего нижней границе яркости
t_index=0,
// Индекс цвета, соответствующего верхней границе яркости
b_index=0,
value_offset; //Смещение значения цвета
double value=0.; //Новое значение цвета
//Изменяем яркость
for(i, t=0; t<3; t++)
for(i=0; i<256; i++)
{if(i+b_offset>255) BGRTransTable[t][i]=255;
else if(i+b_offset<0) BGRTransTable[t][i]=0;
else BGRTransTable[t][i]=i+b_offset; }
// Изменяем контрастность