· ··--──══[ COOLer issue #1 ]══─---·· ·
ЭФФЕКТ: BLUR by GELTORN/STORM




                  -=========ЭФФЕКТ: BLUR=========-


  Довольно  простой  эффект, как раз для начинающих. К тому же, этот
эффект  лежит  в  основе  целого  семейства  эффектов,  и  знaть его
необходимо!

  Blur, в переводе с английского: неясные очертания, размытое пятно.

  Допустим, у  нас  есть  некое изображение размером 320x200x8bit, в
буфере экрана screen. Создаем дополнительный буфер экрана, buffer.

  Цвет   точки   с   координатами   X,Y   в   массиве  buffer  будет
расcчитываться  по  формуле:  цвет_точки = среднее арифметическое от
значений  цвета точек, окружающих точку с координатами X,Y в массиве
screen.

  После  применения  данной формулы ко всем точкам массива buffer, в
этом массиве будет находиться сBlurенное изображение.

Некоторые замечания:
1. Естественно, палитра должна содержать плавные переходы от цвета к
цвету, иначе вместо сBlurенного изображения получим невесть что :-).
Если  это  условие  не  выполняется,  то надо преобразовать исходное
изображение  в  Hi  или  TrueColor  и производить размыв изображения
отдельно для каждого цвета.
2.  При  получении  размытого изображения значения цвета на границах
buffer  не  расcчитывается,  иначе  нам  бы  пришлось бы залазить за
границы массива screen.


Пример:

...
for(short y=1;y<199;y++)
  for(short x=1;x<319;x++)
    buffer[x][y]=(screen[x-1][y+1]+screen[x-1][y]+
                  screen[x-1][y-1]+screen[x][y+1]+
                  screen[x][y-1]+screen[x+1][y+1]+
                  screen[x+1][y]+screen[x+1][y-1])/8;
...

  В  данном  примере мы усредняем значение цвета 8 точек, в принципе
выбор  точек,  по  которым мы находим усредненное значение цвета, за
вами.  Например, для  более  высокой скорости можно выбрать только 4
близлежащих точки:

...
    buffer[x][y]=(screen[x-1][y]+screen[x][y+1]+
                  screen[x][y-1]+screen[x+1][y])/4;
...

  Но  тогда  появляется неприятный побочный эффект: в местах плавных
переходов   цветов   появляется  решетка...  В  общем, не  знаю  как
обьяснить, попробуйте и увидите сами.

  Как  от  этого  избавиться?  В true блюре - никак. Но есть вариант
блюра, в котором этот эффект не появляется:

...
    screen[x][y]=(screen[x-1][y]+screen[x][y+1]+
                  screen[x][y-1]+screen[x+1][y])/4;
...

Относительно true блюра имеем:

Преимущества:
1. Скорость
2. Отпадает необходимость использования дополнительного
frame-буфера.

Недостаток:
Искажение геометрических соотношений изображения.

Обычно  такой  вариант  Blur`a  используется  для улучшения качества
картинки, на различных стадиях вывода изображения.

                                                  ---(Geltorn/Storm)


