Дипломная работа: Разработка программного обеспечения для фильтрации растровых изображений
int y_finish=m_rangY;
if(y+dy>m_pSourceBM->GetBMHeight())
y_finish-=(y+dy-m_pSourceBM->GetBMHeight());
// Расчёт новых значений цвета пиксела с учётом соседей, попавших в зону //действия матрицы преобразования
int NewBGR[3];
int count=0;
for(int c=0, mx=0, my=0; c<3; c++)
{NewBGR[c]=0; count=0;
for(my=y_start; my<y_finish; my++)
for(mx=x_start; mx<x_finish; mx++)
{if((pSPix=m_pSourceBM->GetPixPtr(x+(mx-dx), y+(my-dy)))!=NULL)
{NewBGR[c]+=(m_pMatrix[my*m_rangX+mx]*(*(pSPix+c)));
count+=m_pMatrix[my*m_rangX+mx]; }}}
// Адрес пиксела в изображении-приёмнике
pDPix=m_pDestBM->GetPixPtr(x, y);
//Установка нового значения в приёмное изображение
for(c=0; c<3; c++)
{
// Приведение значения к допустимому диапазону
if(count!=0)
NewBGR[c]=NewBGR[c]/count;
if(NewBGR[c]<0)
NewBGR[c]=0;
else if(NewBGR[c]>255)
NewBGR[c]=255;
*(pDPix+c)=NewBGR[c]; }
return TRUE; };
В методе CmatrixFilter:: TransformPix() сначала определяется область перекрытия изображения и матрицы преобразования. Этот шаг необходим в связи с тем, что на границах изображения пиксел может не иметь соседей.
Новое значение пиксела формируется с учетом значений всех пикселов и коэффициентов матрицы преобразования, попавших в область перекрытия изображения и матрицы преобразования.