Смотрите также : |
|CD Interface| Фракталы| Альтернативные решения| Главная (фреймы) |
|||||||||
Операции с цветом Рассмотрим операции с цветом на наиболее простом примере - размытие. Алгоритм размытия представляет собой четыре вложенных цикла. В первых двух переменная "пробегает" по всему полю обрабатываемого изображения, последние вложенные циклы вычисляют среднее значение каждого пиксела, а результат помещается в исходный пиксел. Это достаточно просто. Вопрос заключается в другом: как вычисляется средний цвет? Пусть у нас переменная lgColor хранит значение цвета текущего пиксела (lgColor as Long). Тогда средним цветом назовем среднее арифметическое каждой их трех состовляющих цвета. Поскольку lgColor= RGB(RED,GREEN,BLUE), где RGB - функция, возвращающая 24-х битовое значение цвета, то для цвета введем новый тип: Type RGBColor Функция, выделяющая три составляющие цвета наоборот будет иметь вид: Public Function GetRGBFromLong
(ByVal color As Long) As RGBColor '
обратная функции RGB() Теперь уже можно привести код размытия: Public Declare Function SetPixelV
Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal
crColor As Long) As Long Public Sub Blur() Примечание. Степень размытия можно изменять. Для этого вводится переменная BlurFactor , которая заменяет единицы во второй паре вложенных циклов (шаг просмотра). Тогда коэффициент для среднего арифметического будет вычисляться по формуле: (2*BlurFactor +1)^2 Дополнение. У объектов Picture1 и Picture2 свойство AutoRedraw должно быть = True. Ниже приведены примеры работы данного кода
Мещанинов Николай, 31 июля 2001 |
||||||||||
Смотрите также : |
| CD Interface | Фракталы | Альтернативные решения | Главная (фреймы) |