-
> Sapersky (03.08.09 14:40) [38]
он скорее спрашивает как сделать форму такой, как у тебя в примере :) т.е. вместо картинки беграунда должно быть то, что под формой, что, имхо, нереально на всяких ХП.
-
Точно... =)
Но у моего знакомого же как-то получилось... =(
Правда немного дёргается при перетаскивании, а так почти как надо...
-
можно фотографировать фон под формой и его выводить заблюренным - но ормозить это будет невероятно, и лагать
-
А как фотографировать фон под формой? Знакомый мне не говорит как он делал... =(
А "заблюренным" - это как бы через матовое стекло чтоль? =) Только зачем так? У него была просто "стелянная" форма... И не тормозила... Только подёргивалась чуть... =))
-
Form1.AlphaBlend Form1.AlphaBlendValue
-
стекло можно сделать как в [3], только с контролами напряг
-
> Б (05.08.09 10:30) [44]
Да нет же... Этот Form1.AlphaBlend только делает полупрозрачным всё подряд... А он как-то сделал часть формы "стеклянной" (похожей на дыру посреди формы)... Говорил случайно получилось... А потом превратил её в матовое стекло...
Кстати, а что может означать ошибка "Canvas does not allow drawing." ?
-
> CSS (05.08.09 17:44) [46]
Да он и впрямь - колдун! P. S. А что с регионами работать не умеем?
-
> Да он и впрямь - колдун! > P. S. А что с регионами работать не умеем?
Не... Он просто афигенно везучий... Один раз 5000-ную купюру на улице нашёл... И дважды 1000-ю... х_Х
Сорри за флуд... =( Про "Canvas does not allow drawing." спрашиваю потому что та самая прога с этой ошибкой вылетает минут через пять... И вырубается тогда только через процессы... А причём тут регионы-то? Ну рамку он скруглял скорее всего регионами, но и только... Как они могут относиться к выводу полупрозрачных битмапов? о_О
-
Короче, ищи компонент - Glassy.
-
Посмотрел, компонент забавный, спасибо... =)
Но у того знакомого и в помине нету никаких нестандартных компонентов... И изображение подёргивается сильнее чем в Glassy... =(
-
> И изображение подёргивается сильнее чем в Glassy... =(
И чё? Тебе от этого хуже? Бери готовый компонент и радуйся. И чё за знакомый такой , что код не показывает или ты даже и не спрашивал? Даже напраления рыть? Думаю вопрос исчерпан.
-
Да я кое-какую прогу не успевал доделать вовремя... Совсем прижало, вот я и стырил кусок кода из его наработок не спросив... =( Теперь он вообще ничего мне не показывает... =(( Сказал только "Использовал форму, таймер и кнопку"...
Просто интересно очень как он такое сотворил... А по теме только один вопрос остался: Объясните пожалуйста, что делает процедура PremultAlpha из проекта AlphaBlend_VCL_test с полупрозрачностью?
-
она затемняет каналы RGB, чем меньше альфа, тем сильнее. я хз как их рисует винда, но при выводе через UpdatelayeredWindow() белая область картинки с нулевой альфой будет видна как белая муть прозрачная для кликов мышкой. И без такой процедуры уже не обойтись. Хотя, если прикинуть, это неправильно - ведь тогда края картинки "зачерняются".
-
> белая область картинки с нулевой альфой будет видна как > белая муть прозрачная для кликов мышкой.
Мышкой не проверял, но у меня примерно так и получалось без этой процедуры... Сначало было ощущение, что Windows.AlphaBlend рисует как бы инвертированно что ли..... Потом подумалось что если Alpha=255 то она накладывает с Alpha=255, а если Alpha=0 - с Alpha=180... Как бы диапазон не так воспринимает...
А возможно самому накладывать полупрозрачную картинку, смешивая цвета (основываясь на величину Alpha данного пикселя)? Есть у кого-нибудь формулы, зависимости или что-то такое? =)
-
Обычная формула блендинга: DstColor = SrcColor * SrcAlpha + DstColor * (1 - SrcAlpha) Есть во 2-м примере, там сначала блюр, потом блендинг. AlphaBlend использует такую: DstColor = SrcColor + DstColor * (1 - SrcAlpha) (что, кстати, расписано по ссылке http://msdn.microsoft.com/en-us/library/dd183393(VS.85,printer).aspx , которая приводилась ещё в [22]) С т.з. быстродействия должно быть немного лучше, т.к. экономится одно умножение. Но практически, насколько помню, полная формула через MMX всё равно быстрее. Соответственно PremultAlpha выполняет операцию: SrcColor = SrcColor * SrcAlpha Ну и на практике к формулам добавляется сдвиг вправо (shr 8, 16) - эквивалент div 256, 65536 - чтобы привести результат к диапазону 0..255.
-
> Sapersky (09.08.09 18:04) [55]
Ой... Проглядел... =((
Спасибо... =))
-
> Кстати, а что может означать ошибка "Canvas does not allow drawing." ?она может быть из-за неправильного использования Canvas.Lock и Canvas.Unlock,а может и из-за утечки памяти(какие-нибудь GetDC в цикле делаете,а ReleaseDC забыли) > DstColor = SrcColor * SrcAlpha + DstColor * (1 - SrcAlpha) > DstColor = SrcColor + DstColor * (1 - SrcAlpha)эм...кажется так должно быть: round(SrcColor + DestColor * (1 - SrcAlpha / 255)) Но практически, насколько помню, полная формула через MMX всё равно быстрее. а кто такой MMX?можно где-то посмотреть эту полную формулу?=)
-
полная формула выше, домножаешь исходник на альфу, спрайт на обратную альфу и складываешь (или наоборот, не помню). ммх - это расширение, восемь регистров в 64 бита =)
-
да я про эту фразу:
> Но практически, насколько помню, полная формула через MMX всё равно быстрее.
где посмотреть на эту ускоренную формулу?
> ммх - это расширение, восемь регистров в 64 бита =)
не понял...можно попроще?=(
|