В данном посте я расскажу как написать простую программу, реализующую фотофильтры. В конце текста ссылка на zip-архив с готовой версией.
Волшебные фильтры, придающие фотографиям ностальгические нотки, покорили миллионы людей, в том числе и меня.
Иногда, оттенки серого, искусственно подкрашенные коричневым, голубым или синим цветом придают фотографиям особый художественный эффект. Конечно же это не означает игнорирование настроек черной и белой точек баланса белого. Так называемые художественные фильтры, всегда применяются после того как все возможные искажения устранены.
Большинство фильтров Instagram включают сложную цепочку операций поэлементного изменения цвета. В первом приближении, некоторые эффекты можно моделировать с помощью ‘кривых’.
Кривые — представляют собой таблицу значений красного, зеленого и синего цвета исходного и результирующего изображений. В растровых редакторах данную функцию представляют в виде графика, который можно сохранить в файл. Некоторые программы например Gimp, создают обычный текстовый файл. Его можно открыть в своей программе, с помощью стандартных текстовых функций.
Алгоритм изменения цвета кривыми реализуется очень легко. Каждому пикселю, исходной картинки присваивается новый цвет, согласно табличной функции.
// Zurbaganin // 2013 //Для работы с различными форматами изображений используется библиотека BGRABitmap function cuver_apply(number:integer;myPict:TBGRABitmap): TBGRABitmap; var x,y: integer; p: PBGRAPixel; Tp:TBGRAPixel; Tp1,Tp2:TBGRAPixel; r,g,b,v:byte; //arr1[0..3,0..255 ] - массив значений цвета, прочитанный из файла <кривых> begin for y := 0 to myPict.Height-1 do begin p := myPict.Scanline[y]; for x := 0 to myPict.Width-1 do begin r:=Round(255*arr1[1,p^.red]); g:=Round(255*arr1[2,p^.green]); b:=Round(255*arr1[3,p^.blue]); r:=Round(255*arr1[0,r]); g:=Round(255*arr1[0,g]); b:=Round(255*arr1[0,b]); Tp.red:=r; Tp.green:=g; Tp.blue:=b; p^:= Tp; inc(p); end; end; myPict.InvalidateBitmap; Result:=myPict; end;
Я подобрал несколько файлов и использовал их, для создания нескольких эффектов.
Настройки (кривые) подбирались основываясь на кадрах из фильмов (Аватар, Пираты Карибского моря) и некоторых фотографий.
Вот как будет выглядеть знаменитый персонаж после обработки фильтрами.
ссылка на оригинал статьи http://habrahabr.ru/post/172823/
Добавить комментарий