Дипломная работа: Разработка программного обеспечения для фильтрации растровых изображений
Для реализации пространственных (матричных) методов преобразования создаём класс CMatrixFilter. Интерфейс класса приведён в листинге 3.7.3
Листинг 3.7.3 – Интерфейс базового для матричных фильтров класса CmatrixFilter. Файл Filter.h
// Пространственные (матричные фильтры)
// Базовый класс
class CMatrixFilter: public CFilter
{
protected:
int m_rangX; // размер матрицы по X и Y
int m_rangY;
const int *m_pMatrix; // указатель на матрицу
public:
//Методпреобразования пиксела
BOOL TransformPix(LONG x, LONG y); };
Данными этого класса являются размер матрицы преобразования и указатель на матрицу. Размер мртрицы определяет зону пикселов, окружающих пиксел (x,y), которая будет вовлечена в расчёт нового значения пиксела (x,y). Указателю на матрицу преобразования m_pMatrix будет присваиваться адрес матрицы, которая будет использована в преобразовании. Реализация метода CmatrixFilter:: TransformPix() приведена в листинге3.7.4
Листинг 3.7.4 – Метод CmatrixFilter:: TransformPix(). Файл Filter.cpp
// Пространственные фильтры
BOOL CMatrixFilter::TransformPix(LONG x, LONG y)
{BYTE *pDPix=NULL, *pSPix=NULL;
// Источник и приёмник необходимы
if(m_pSourceBM==NULL || m_pDestBM==NULL)
return FALSE;
// Определяем зону перекрытия изображения и матрицы. Это требуется для //обработки пикселов, находящихся на границах изображения
int x_start=0;
int dx=m_rangX/2, dy=m_rangY/2;
if(x-dx<0) x_start=dx-x;
int y_start=0;
if(y-dy<0) y_start=dy-y;
int x_finish=m_rangX;
if(x+dx>m_pSourceBM->GetBMWidth())