ВУЗ:
Составители:
Рубрика:
- 22 -
В модуле main.cpp проекта Paint.bpr изменение цвета осуществляется
функцией ChangeColorAndIntensity (приведен пример нескольких преобразо-
ваний, определяемых значением управляющей переменной rule):
Int iX,iY;
short colR, colG, colB, intCol, // 0-255 интенсивность цвета (8 бит)
selColor = clRed;
float A=0.0, B=-0.0039370079, C= 0.0039370079; // кривая в) на рис.2.2 и табл.2
…
colImage = new TImage(this); // внеэкранный битовый контейнер
colImage->Picture = Image1->Picture; // скопировали изображение в colImage
…
for (iX=0; iX<nX; iX++) // цикл по абсциссам пикселов ИЗОБРАЖЕНИЯ
for (iY=0; iY<nY; iY++) // цикл по ординатам
{
// получить интенсивности цветов из внеэкранного контейнера
colR=GetRValue(colImage->Canvas->Pixels[iX][iY]); // интенсивность цвета R
colG=GetGValue(colImage->Canvas->Pixels[iX][iY]); // …цвета G
colB=GetBValue(colImage->Canvas->Pixels[iX][iY]); // …цвета B
switch (rule) // переменная rule определяет режим преобразования цвета
{
case 1: // преобразовать в оттенки серого ============================
// среднее арифметическое из интенсивностей всех цветов
intCol=(colR+colG+colB)/3;
Image1->Canvas->Pixels[iX][iY] = RGB(intCol, intCol, intCol);
break;
case 2: // преобразовать в заданный цвет selColor ======================
Image1->Canvas->Pixels[iX][iY] = RGB(GetRValue(selColor)*intCol/255,
GetGValue(selColor)*intCol/255,
GetBValue(selColor)*intCol/255);
break;
case 3: // уменьшить интенсивность всех цветов вдвое ==================
Image1->Canvas->Pixels[iX][iY] = RGB(colR/2, colG/2, colB/2);
break;
case 3: // заданные полиномом преобразования цветов =================
// используем схему Горнера для вычисление полинома y=A+B*x+С*x*x
// где A,B,C – известные коэффициенты полинома, x,y – интенсивности
// исходного и преобразованного цветов соответственно
colR = A + colR * (B + C * colR); // интенсивность цвета R
colG = A + colG * (B + C * colG); // …цвета G
colB = A + colB * (B + C * colB); // …цвета B
Image1->Canvas->Pixels[iX][iY] = RGB(colR, colG, colB);
break;
default: // другие значения rule пока не рассматриваются… ==============
break;
} // конец CASE
} // конец цикла по пикселам изображения (по iX,iY)
В модуле main.cpp проекта Paint.bpr изменение цвета осуществляется
функцией ChangeColorAndIntensity (приведен пример нескольких преобразо-
ваний, определяемых значением управляющей переменной rule):
Int iX,iY;
short colR, colG, colB, intCol, // 0-255 интенсивность цвета (8 бит)
selColor = clRed;
float A=0.0, B=-0.0039370079, C= 0.0039370079; // кривая в) на рис.2.2 и табл.2
…
colImage = new TImage(this); // внеэкранный битовый контейнер
colImage->Picture = Image1->Picture; // скопировали изображение в colImage
…
for (iX=0; iXCanvas->Pixels[iX][iY]); // интенсивность цвета R
colG=GetGValue(colImage->Canvas->Pixels[iX][iY]); // …цвета G
colB=GetBValue(colImage->Canvas->Pixels[iX][iY]); // …цвета B
switch (rule) // переменная rule определяет режим преобразования цвета
{
case 1: // преобразовать в оттенки серого ============================
// среднее арифметическое из интенсивностей всех цветов
intCol=(colR+colG+colB)/3;
Image1->Canvas->Pixels[iX][iY] = RGB(intCol, intCol, intCol);
break;
case 2: // преобразовать в заданный цвет selColor ======================
Image1->Canvas->Pixels[iX][iY] = RGB(GetRValue(selColor)*intCol/255,
GetGValue(selColor)*intCol/255,
GetBValue(selColor)*intCol/255);
break;
case 3: // уменьшить интенсивность всех цветов вдвое ==================
Image1->Canvas->Pixels[iX][iY] = RGB(colR/2, colG/2, colB/2);
break;
case 3: // заданные полиномом преобразования цветов =================
// используем схему Горнера для вычисление полинома y=A+B*x+С*x*x
// где A,B,C – известные коэффициенты полинома, x,y – интенсивности
// исходного и преобразованного цветов соответственно
colR = A + colR * (B + C * colR); // интенсивность цвета R
colG = A + colG * (B + C * colG); // …цвета G
colB = A + colB * (B + C * colB); // …цвета B
Image1->Canvas->Pixels[iX][iY] = RGB(colR, colG, colB);
break;
default: // другие значения rule пока не рассматриваются… ==============
break;
} // конец CASE
} // конец цикла по пикселам изображения (по iX,iY)
- 22 -
Страницы
- « первая
- ‹ предыдущая
- …
- 20
- 21
- 22
- 23
- 24
- …
- следующая ›
- последняя »
