Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.02.06;
Скачать: CL | DM;

Вниз

Нелинейная прозрачность.   Найти похожие ветки 

 
Карелин Артем   (2002-10-23 14:40) [0]

Есть картинка: темно-красное пятно на черном фоне. Если засунуть ее в 3D MAX, подстелив ее же в альфа-канал, то пятно будет очень даже выделяться на бэкграунде. У меня не получается добиться такого эффекта. Я делаю альфа-канал по формулам преобразования в оотенки серого, по усреднению цвета, но результатом моих преобразований является едва заметное красноватое пятнышко.
Законы рассчета альфы по цветовым составляющим в Максе явно далеки от линейных.
Вопрос в том, какими формулами следует пользоваться для рассчета альфы в случае не очень ярких рисунков и чтобы они были не слишком "полупрозрачными".


 
Alx2   (2002-10-23 15:07) [1]

Не знаю, поможет ли это:

=================================
Григорьев Антон
10.06.99

Найти меня можно по адресу duker@ipmt-hpm.ac.ru
или grigorievab@mail.ru

.................
.................
.................
.................

SL[X].rgbtRed:=(Transparency*SL[X].rgbtRed+(100-Transparency)*GetRValue(_TranspColor)) div 100;
SL[X].rgbtGreen:=(Transparency*SL[X].rgbtGreen+(100-Transparency)*GetGValue(_TranspColor)) div 100;
SL[X].rgbtBlue:=(Transparency*SL[X].rgbtBlue+(100-Transparency)*GetBValue(_TranspColor)) div 100
{ Предыдущие три строчки - реализация алгоритма смешения цветов
Pr:=(Pa*Wa+Pb*Wb)/(Wa+Wb), где Pr - результирующий цвет,
Pa и Pb - исходные цвета, Wa и Wb - веса этих цветов.
У нас в качестве Pa берётся цвет пикселя скопированной с экрана картинки,
В качестве Pb - заранее заданный цвет TranspColor, Wa=Transparency,
Wb=100-Transparency. Очевидно, что эту операцию необходимо выполнить для
каждого из основных цветов в отдельности.
Здесь открывается широкое поле для деятельности. Можно, например, сделать
Transparency не постоянным, а зависящим от координаты - получится градиентная
прозрачность. Или можно в качестве Pb взять не фиксированный цвет, а цвет
пикселя другой картинки - получится окно, фоном которого служит
полупрозрачная картинка. В конце концов, можно изменить алгоритм смешения
цветов, и тогда откроются новые возможности.

Кстати, вот пример градиентной прозрачности:
SL[X].rgbtRed:=((CH-Y)*SL[X].rgbtRed+Y*GetRValue(TranspColor)) div CH;
SL[X].rgbtGreen:=((CH-Y)*SL[X].rgbtGreen+Y*GetGValue(TranspColor)) div CH;
SL[X].rgbtBlue:=((CH-Y)*SL[X].rgbtBlue+Y*GetBValue(TranspColor)) div CH;
Хочу добавить, что это смотрится нормально только в режимах True Color.
High Color для этого недостаточно. А в режимах, худших, чем High Color,
полупрозрачные окна выглядят страшнее, чем ядерная война.
}
================================


 
Карелин Артем   (2002-10-23 15:07) [2]

Формула видимо включает в себя экспоненту. Только трудновато у меня с выводом таких формул :(


 
Карелин Артем   (2002-10-24 09:49) [3]

А вот что я придумал:
альфа составляющая пусть будет функцией от насыщенности цвета. Часто берут альфу равную насыщенности. Мне же надо было нечто кривое. Ну и в итоге родилась следующая функция:
|C*(k-1) |
А=255*Ln|-------+1|/Ln(k)
| 255 |

Где С - насыщенность цвета (есть достаточно много методик рассчета)
K - к-т, отвечающий за нелинейность функции.

P.S. Математика делает наш сон спокойным, а кошельки пухлыми.



Страницы: 1 вся ветка

Текущий архив: 2003.02.06;
Скачать: CL | DM;

Наверх




Память: 0.46 MB
Время: 0.056 c
6-15815
Свой
2002-11-19 12:23
2003.02.06
IdHTTPServer


1-15651
Максон
2003-01-29 16:24
2003.02.06
как сделать что б при нажатии кнопки на форме, она сворачивалась


8-15767
Vox
2002-10-26 16:42
2003.02.06
ТВ-Тюнер


3-15456
Электрочайник
2003-01-18 10:44
2003.02.06
Удаление строк в Interbase-таблицах


1-15755
Fiend
2003-01-28 11:00
2003.02.06
Хотел было поймать WM_MDIMAXIMIZE, да не тут-то было :(





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский