Доброе время суток! Нужна функция вида: void smooth(DWORD * prgba, unsigned width, unsigned height, unsigned percent); Т. е. функции передается массив цветов точек формата (RGBA-32 bit, на каждый канал ровно 8-бит), ширина и высота картинки и процент сглаживания, ну и задача функции нанести эффект сглаживания. Я искал, но все примеры на Delphi, с использованием всяких там компонентов. Я в pascal'е-видных языках не силен, поэтому до конца понять алгоритм так и не удалось.
http://ru.wikipedia.org/wiki/%D0%91%D0%B8%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%84%D0%B8%D0%BB%D1%8C%D1%82%D1%80%D0%B0%D1%86%D0%B8%D1%8F
Копай в сторону матричных фильтров. Там всё просто, для каждого эффекта есть своя матрица. Можно играться с её значениями и тем самым создавать определённые свои эффекты.
Arthur Размытие делается так. Обычно в качестве ядра фильтера используют Гаусовское размытие. Рассмотрим одномерный случий один канал. Реализации различаются. Можно разделить на КИХ фильтеры и БИХ. КИХ представляет из себя следующее. x[j] входной массив значений Мы берем в некоторой позиции j соседнии элементы домножаем их на весовые коэфициенты и складываем и клодем ввыходной массив. И сдвигаем позицию j. for (i=-n; i<=n; i++) y[j]+=x[j+i]*f[i+n]; Если в свертке x[j+i] выходит за приделы массива то берем равною 0 это возникает только на границах. Еще как вариант брать семметричное отраженное. Эта операция называется сверткой. Также называют боксовым фильтером или матричным называется так так как фильтр f представляет сабой массив, а в 2D матрицу. Массив f заполняется по формуля Гауса. n - Это радиус размытия s- sigma стандартное отклонение. Обычно радиус задают через сигму n=int((3*s+1)/2); // Правило 3 сигм. n=floor(s * 3*sqrt(2*pi)/4 + 0.5); // Более точная взаимо связь for (i=-n; i<=n; i++) f[i+n]=1/(sqrt(2*Pi*s*s))*exp(-i*i/(2*s*s)); // Гаусовская формула. В программах обычно указывается сигма по которой будет вестись размытие. Теперь что касается 2D случия. Конечно можно завести 2D матрицу, но гораздо быстрее выполнить вначале размытие по строчкам затем по столбцам. Вместо N^2 умножений мы имеем 2*N. И такое размытие можно сделать для всех каналов.