Коллекция фильтров...

Обсуждение проектов наших жителей.
Вы можете выставить проект на тест или найти помощников для его реализации.

Модератор: BV

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Коллекция фильтров...

Сообщение BV » 16.03.2006 (Чт) 21:27

Решил объединить графические фильтры в один проект.
Все вызовы API и пример использования в архиве.

[новая версия ниже]
Последний раз редактировалось BV 24.03.2006 (Пт) 21:48, всего редактировалось 4 раз(а).
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 17.03.2006 (Пт) 17:41

Отсутствие комментариев говорит либо о том, что всё отлично, либо наоборот...
Может что следует добавить, или что изменить?

Кстати, у кого-нибудь есть достаточно простой алгоритм фильтра "Насыщенность"?
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Бяка
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 219
Зарегистрирован: 21.09.2005 (Ср) 21:28

Сообщение Бяка » 18.03.2006 (Сб) 2:00

самый простой? :?:
если да тогда вот


Код: Выделить всё
Public Const ILLUMINANT_A = 1
Public Const HALFTONE = 4
Public Type COLORADJUSTMENT
        caSize As Integer
        caFlags As Integer
        caIlluminantIndex As Integer
        caRedGamma As Integer
        caGreenGamma As Integer
        caBlueGamma As Integer
        caReferenceBlack As Integer
        caReferenceWhite As Integer
        caContrast As Integer
        caBrightness As Integer
        caColorfulness As Integer
        caRedGreenTint As Integer
End Type
Public Declare Function StretchBlt Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long
Public Declare Function SetStretchBltMode Lib "gdi32" (ByVal hdc As Long, ByVal nStretchMode As Long) As Long
Public Declare Function GetColorAdjustment Lib "gdi32" (ByVal hdc As Long, lpca As COLORADJUSTMENT) As Long
Public Declare Function SetColorAdjustment Lib "gdi32" (ByVal hdc As Long, lpca As COLORADJUSTMENT) As Long
Public Declare Function GetStretchBltMode Lib "gdi32" (ByVal hdc As Long) As Long


Public Sub Mylt(ByRef Source As PictureBox, ByVal HScroll1 As Long, ByVal filt As Integer)
Dim CA As COLORADJUSTMENT
    GetColorAdjustment Source.hdc, CA
    CA.caSize = Len(CA)
    Select Case filt
    Case 1: CA.caColorfulness = HScroll1 ' Насыщенность
    Case 2: CA.caBrightness = HScroll1 ' яркость
    Case 3 ' контрастность
        CA.caBrightness = -HScroll1 * 2
        CA.caContrast = HScroll1
        End Select
    CA.caIlluminantIndex = ILLUMINANT_A
    If GetStretchBltMode(Source.hdc) <> HALFTONE Then
        SetStretchBltMode Source.hdc, HALFTONE
    End If
    SetColorAdjustment Source.hdc, CA
    Source.ScaleMode = vbPixels
    StretchBlt Source.hdc, 0, 0, Source.ScaleWidth, Source.ScaleHeight,  Source.hdc, 0, 0, Source.ScaleWidth, Source.ScaleHeight, vbSrcCopy

End Sub

есть свои плюсы и минусы у етого примера
огромный плюс за огромную скорость
минус за потерю качества " хотя на JPGах незаметно

ещё мона побаловаться с COLORADJUSTMENT ...

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 18.03.2006 (Сб) 2:10

Ну именно этот метод я и не хотел использовать :) Ещё есть один, через преобразования HLS>RGB, тоже не подходит.

Мне нужен алгоритм для массива Pixels(). Т.е. другими словами - код этого фильтра из GDI.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Бяка
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 219
Зарегистрирован: 21.09.2005 (Ср) 21:28

Сообщение Бяка » 18.03.2006 (Сб) 2:34

гы, мне должны подогнать алгоритмы фотошоповских фильтров, если там будет Насыщенность то кину, а на ВБ то уже не составит труду перевести :roll:

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 19.03.2006 (Вс) 20:26

Добавлены настройки цвета, оптимизированы фильтры, исправлены ошибки.
Думаю добавить фильтры Swirl и Rainbow.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 23.03.2006 (Чт) 0:23

Добавлены новые фильтры, кое-какие исправления. Архив обновлён.

Хм, ни одного комментария... Странно.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Etc
Обычный пользователь
Обычный пользователь
 
Сообщения: 64
Зарегистрирован: 18.11.2004 (Чт) 19:07
Откуда: Челябинск

Сообщение Etc » 23.03.2006 (Чт) 18:16

Просто Круто. Аж нечего сказать. Как раз то что я искал. Спасибоо. :thumright:
Ну не знаю я чего в подписи написать... :-)

Бяка
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 219
Зарегистрирован: 21.09.2005 (Ср) 21:28

Сообщение Бяка » 23.03.2006 (Чт) 22:54

ну, есть кое что :roll:
1, некоректно работает контрастность (цвета искажаются)
2, при размытии рисунок сдвигается вправо+вниз на 1-2 пикселя(не проверял наскока)
пока всё

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 24.03.2006 (Пт) 2:34

2 Etc

Скажи, например, какие ещё фильтры действительно стоит добавить?


2 Бяка

1. Да, есть такое. Исправлю.
2. Уже исправил.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 24.03.2006 (Пт) 21:47

Исправлены ошибки, доработаны фильтры.

[новая версия ниже]
Последний раз редактировалось BV 27.03.2006 (Пн) 1:59, всего редактировалось 1 раз.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Naked
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 207
Зарегистрирован: 27.10.2004 (Ср) 3:16
Откуда: Дальнегорск столица мира

Сообщение Naked » 25.03.2006 (Сб) 7:30

думаю что надо исходники добавить

GAGArin
Неистовый флудер
Неистовый флудер
 
Сообщения: 1777
Зарегистрирован: 23.12.2002 (Пн) 12:46
Откуда: я тут взялся, не знаю...

Сообщение GAGArin » 25.03.2006 (Сб) 10:40

Может не совсем по теме, но давно хотел найти исходник параметрической Flare.

2, при размытии рисунок сдвигается вправо+вниз на 1-2 пикселя(не проверял наскока)
пока всё

Не только при размытии. Emboss действует аналогично (до сих пор) :wink:

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 25.03.2006 (Сб) 22:55

Naked писал(а):думаю что надо исходники добавить


Хм, будут, по завершению проекта :)

GAGArin писал(а):Может не совсем по теме, но давно хотел найти исходник параметрической Flare.


Слышу о таком, честно говоря, впервые...

GAGArin писал(а):Не только при размытии. Emboss действует аналогично (до сих пор)


Исправил.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Etc
Обычный пользователь
Обычный пользователь
 
Сообщения: 64
Зарегистрирован: 18.11.2004 (Чт) 19:07
Откуда: Челябинск

Сообщение Etc » 26.03.2006 (Вс) 17:59

Еще хотелось бы прелбразование в оттенки серого. Не B&W как сейчас а именно в оттенки серого.
Ну не знаю я чего в подписи написать... :-)

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 26.03.2006 (Вс) 23:14

Ну это тоже самое, что Saturation со значеним 0... Впрочем, верну :)
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 31.03.2006 (Пт) 22:48

Видимо, уже релиз. (нет, не релиз...)

[новая версия ниже]
Последний раз редактировалось BV 14.04.2006 (Пт) 1:11, всего редактировалось 1 раз.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

--=GAMER=--
Фиолетовый бот
Фиолетовый бот
Аватара пользователя
 
Сообщения: 810
Зарегистрирован: 22.03.2004 (Пн) 11:29
Откуда: Владивосток

Сообщение --=GAMER=-- » 01.04.2006 (Сб) 5:47

1)Излишне долгая загрузка фильтров Erode и Median.
2)Кстати если применить эти фильтры(по порядку(Erode затем Median)
то в правом вершнем углу можно наблюдать белую точку.
3)Нельзя регулировать силу эффекта.
4)НЕТ сохранения изменений :!:
В темноте слепец — самый надежный проводник. В эпоху безумия пусть тебя ведет сумасшедший.

rRenderer Engine
VB Wiki

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 01.04.2006 (Сб) 14:09

1. Есть алгоритм побыстрее, но у него есть ограничения: радиус должен быть не более меньшей половины изображения, а изображение должно иметь размеры, кратные 2...
2. Потрясающая наблюдательность... :) Исправлю.
3. Ну да? Практический любой фильтр имеет параметр Level.
4. Вот тут не совсем понял... Ты об истории действий? Если да, то это уже на совести программиста, использующего библиотеку :)
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 02.04.2006 (Вс) 9:40

BV
Для 1. размеры, кратные 2, не критичны :roll:,
а ограничение радиуса можно и исправить.

--=GAMER=--
Фиолетовый бот
Фиолетовый бот
Аватара пользователя
 
Сообщения: 810
Зарегистрирован: 22.03.2004 (Пн) 11:29
Откуда: Владивосток

Сообщение --=GAMER=-- » 02.04.2006 (Вс) 10:22

2BV
Сохранение - запись файлов тоесть в *.bmp или *.jpg иначе программа не имеет смысла :?
В темноте слепец — самый надежный проводник. В эпоху безумия пусть тебя ведет сумасшедший.

rRenderer Engine
VB Wiki

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 02.04.2006 (Вс) 14:47

Mikle писал(а):Для 1. размеры, кратные 2, не критичны :roll:,
а ограничение радиуса можно и исправить.


Нет, я не о твоём алгоритме :) В фильтрах Median и Erode принцип немного другой.

--=GAMER=-- писал(а):Сохранение - запись файлов тоесть в *.bmp или *.jpg иначе программа не имеет смысла :?


Как это связано с графическими фильтрами? :roll:
Если в таком духе продолжать, то результатом станет "GDIPlusEx"...
Последний раз редактировалось BV 07.04.2006 (Пт) 2:27, всего редактировалось 1 раз.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

--=GAMER=--
Фиолетовый бот
Фиолетовый бот
Аватара пользователя
 
Сообщения: 810
Зарегистрирован: 22.03.2004 (Пн) 11:29
Откуда: Владивосток

Сообщение --=GAMER=-- » 03.04.2006 (Пн) 4:54

BV
Наверно я не правильно понял твою мысль - ты сделал прогу по методу
нашёл_всё_что_смог_и_кинул_в_один_проект ? :)
То есть юзверь должен сам смотреть в код того фильтра который ему понравился и плагиатить в своё удовольтвие ? :D
В темноте слепец — самый надежный проводник. В эпоху безумия пусть тебя ведет сумасшедший.

rRenderer Engine
VB Wiki

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 03.04.2006 (Пн) 12:57

--=GAMER=--
А как плагиатить? Все фильтры в DLL, так что придется ее юзать.
BV
Что-то непонятное делает фильтр Erode, я надеялся на что-то вроде фильтра из Bryce. Так же есть фильтра, которые явно добавлены "для количества", например Rainbow. Для чего он может понадобиться?

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 03.04.2006 (Пн) 15:35

2 --=GAMER=--

Нет, не по такому методу. Это вроде дополнения к редакторам растровой графики.

Сохранение в JPEG я сделать могу, но это:

- 30-40 КБ дополнительного кода
- уход от основной цели библиотеки

И всё-таки сделать сохранение?


2 Mikle

Erode - это Minimum из Photoshop, название для ясности поменяю :)
Minimum - это сканируется определенная область изображения, значения пикселей из этой области заносятся в массив, массив сортируется и к центральному пикселю применяется минимальное значение из массива. Maximum - берётся максимальное, Median - среднее.

Что до фильтра Rainbow, он зачем-то есть в Compupic-Pro (альтернатива ACDSee), вот я его и добавил.

Лучше скажи, не какие фильтры убрать, а какие добавить ;)
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 03.04.2006 (Пн) 17:14

BV
Убрать - не важно, мне они не мешают, а вот нормальный Erode мне бы пригодился. Еще очень полезный фильтр - "Create Bamp Map from Heght Map", правда такой себе я уже сделал сам.

--=GAMER=--
Фиолетовый бот
Фиолетовый бот
Аватара пользователя
 
Сообщения: 810
Зарегистрирован: 22.03.2004 (Пн) 11:29
Откуда: Владивосток

Сообщение --=GAMER=-- » 04.04.2006 (Вт) 5:00

BV писал(а):И всё-таки сделать сохранение?

ОДНОЗНАЧНО ДА :D :!:

Добавь фильтры свечения ! :wink:
В темноте слепец — самый надежный проводник. В эпоху безумия пусть тебя ведет сумасшедший.

rRenderer Engine
VB Wiki

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 04.04.2006 (Вт) 9:38

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

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 06.04.2006 (Чт) 18:10

--=GAMER=-- писал(а):ОДНОЗНАЧНО ДА :D :!:


Подумал и решил - всё же это коллекция фильтров, потому сделаю отдельным проектом: http://bbs.vbstreets.ru/viewtopic.php?p=6596125#6596125

--=GAMER=-- писал(а):Добавь фильтры свечения ! :wink:


Поподробнее можно? Где я могу эти фильтры увидеть?
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

--=GAMER=--
Фиолетовый бот
Фиолетовый бот
Аватара пользователя
 
Сообщения: 810
Зарегистрирован: 22.03.2004 (Пн) 11:29
Откуда: Владивосток

Сообщение --=GAMER=-- » 07.04.2006 (Пт) 2:26

2BV
Photoshop CS 8.0
Например
Plaster
Charocal
Bas Relief
Accented Edges
Glowing Edges
Neon Glow

и др.
В темноте слепец — самый надежный проводник. В эпоху безумия пусть тебя ведет сумасшедший.

rRenderer Engine
VB Wiki

След.

Вернуться в Наши проекты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 40

    TopList  
cron