Конференция "Media" » Как выводить полупрозрачные битмапы? [D7, WinXP]
 
  • antonn © (04.08.09 15:05) [40]

    > Sapersky   (03.08.09 14:40) [38]

    он скорее спрашивает как сделать форму такой, как у тебя в примере :)
    т.е. вместо картинки беграунда должно быть то, что под формой, что, имхо, нереально на всяких ХП.
  • CSS (04.08.09 17:29) [41]
    Точно... =)

    Но у моего знакомого же как-то получилось... =(

    Правда немного дёргается при перетаскивании, а так почти как надо...
  • antonn © (04.08.09 20:36) [42]
    можно фотографировать фон под формой и его выводить заблюренным - но ормозить это будет невероятно, и лагать
  • CSS (04.08.09 21:59) [43]
    А как фотографировать фон под формой?
    Знакомый мне не говорит как он делал... =(

    А "заблюренным" - это как бы через матовое стекло чтоль? =)
    Только зачем так? У него была просто "стелянная" форма...
    И не тормозила... Только подёргивалась чуть... =))
  • Б (05.08.09 10:30) [44]
    Form1.AlphaBlend
    Form1.AlphaBlendValue
  • antonn © (05.08.09 13:14) [45]
    стекло можно сделать как в [3], только с контролами напряг
  • CSS (05.08.09 17:44) [46]

    > Б   (05.08.09 10:30) [44]


    Да нет же... Этот Form1.AlphaBlend только делает полупрозрачным всё подряд...
    А он как-то сделал часть формы "стеклянной" (похожей на дыру посреди формы)...
    Говорил случайно получилось...
    А потом превратил её в матовое стекло...

    Кстати, а что может означать ошибка "Canvas does not allow drawing." ?
  • Б (06.08.09 22:00) [47]

    > CSS   (05.08.09 17:44) [46]


    Да он и впрямь - колдун!
    P. S. А что с регионами работать не умеем?
  • CSS (06.08.09 22:08) [48]
    > Да он и впрямь - колдун!
    > P. S. А что с регионами работать не умеем?


    Не... Он просто афигенно везучий...
    Один раз 5000-ную купюру на улице нашёл... И дважды 1000-ю... х_Х

    Сорри за флуд... =(



    Про "Canvas does not allow drawing." спрашиваю потому что та самая прога с этой ошибкой вылетает минут через пять...
    И вырубается тогда только через процессы...

    А причём тут регионы-то?
    Ну рамку он скруглял скорее всего регионами, но и только...
    Как они могут относиться к выводу полупрозрачных битмапов? о_О
  • Б (07.08.09 11:03) [49]
    Короче, ищи компонент - Glassy.
  • CSS (07.08.09 23:06) [50]
    Посмотрел, компонент забавный, спасибо... =)

    Но у того знакомого и в помине нету никаких нестандартных компонентов...
    И изображение подёргивается сильнее чем в Glassy... =(
  • Б (07.08.09 23:38) [51]

    > И изображение подёргивается сильнее чем в Glassy... =(


    И чё? Тебе от этого хуже?
    Бери готовый компонент и радуйся.
    И чё за знакомый такой , что код не показывает или ты даже и не спрашивал? Даже напраления рыть?
    Думаю вопрос исчерпан.
  • CSS (08.08.09 01:40) [52]
    Да я кое-какую прогу не успевал доделать вовремя...
    Совсем прижало, вот я и стырил кусок кода из его наработок не спросив... =(
    Теперь он вообще ничего мне не показывает... =((
    Сказал только "Использовал форму, таймер и кнопку"...

    Просто интересно очень как он такое сотворил...



    А по теме только один вопрос остался: Объясните пожалуйста, что делает процедура PremultAlpha из проекта AlphaBlend_VCL_test с полупрозрачностью?
  • antonn © (08.08.09 14:05) [53]
    она затемняет каналы RGB, чем меньше альфа, тем сильнее.
    я хз как их рисует винда, но при выводе через UpdatelayeredWindow() белая область картинки с нулевой альфой будет видна как белая муть прозрачная для кликов мышкой. И без такой процедуры уже не обойтись.
    Хотя, если прикинуть, это неправильно - ведь тогда края картинки "зачерняются".
  • CSS (08.08.09 23:15) [54]
    > белая область картинки с нулевой альфой будет видна как
    > белая муть прозрачная для кликов мышкой.


    Мышкой не проверял, но у меня примерно так и получалось без этой процедуры...
    Сначало было ощущение, что Windows.AlphaBlend рисует как бы инвертированно что ли.....
    Потом подумалось что если Alpha=255 то она накладывает с Alpha=255, а если Alpha=0 - с Alpha=180... Как бы диапазон не так воспринимает...

    А возможно самому накладывать полупрозрачную картинку, смешивая цвета (основываясь на величину Alpha данного пикселя)?
    Есть у кого-нибудь формулы, зависимости или что-то такое? =)
  • Sapersky (09.08.09 18:04) [55]
    Обычная формула блендинга:
    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.
  • CSS (16.08.09 03:46) [56]
    > Sapersky   (09.08.09 18:04) [55]

    Ой... Проглядел... =((

    Спасибо... =))
  • Вася (26.01.10 11:52) [57]
    > Кстати, а что может означать ошибка "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?можно где-то посмотреть эту полную формулу?=)
  • antonn © (26.01.10 13:55) [58]
    полная формула выше, домножаешь исходник на альфу, спрайт на обратную альфу и складываешь (или наоборот, не помню).
    ммх - это расширение, восемь регистров в 64 бита =)
  • Вася (26.01.10 14:09) [59]
    да я про эту фразу:

    > Но практически, насколько помню, полная формула через MMX всё равно быстрее.

    где посмотреть на эту ускоренную формулу?

    > ммх - это расширение, восемь регистров в 64 бита =)

    не понял...можно попроще?=(
 
Конференция "Media" » Как выводить полупрозрачные битмапы? [D7, WinXP]
Есть новые Нет новых   [134430   +2][b:0][p:0.001]