Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.08.2015, 14:25   #31
Bruce Wayne
Пользователь
 
Регистрация: 08.07.2015
Сообщений: 21
По умолчанию

ResourceSpace, а можно ещё один вопрос? Почему-то после использования функции Premult_BMP частично прозрачные элементы на картинке становятся темнее, как будто убавляется яркость. Где-то видел раньше такую проблему, да никак не могу найти... Кажется, что-то связано с гаммой, которую тоже нужно передавать в функцию, так как по умолчанию она задана константой. Или я ошибаюсь? Наверное, это было про GDI+.

Последний раз редактировалось Bruce Wayne; 19.08.2015 в 14:39.
Bruce Wayne вне форума Ответить с цитированием
Старый 19.08.2015, 17:18   #32
ResourceSpace
Форумчанин
 
Аватар для ResourceSpace
 
Регистрация: 30.06.2015
Сообщений: 353
По умолчанию

Функции API, такие как UpdateLayeredWindow() и AlphaBlend() используют сокращённую формулу блендинга. Поэтому перед тем как передавать картинку им - нужно выполнить Premult_BMP(), один раз. В MSDN на этот счёт прокомментировано так:
Цитата:
Because this API uses premultiplied alpha, the red, green and blue channel values in the bitmap must be premultiplied with the alpha channel value. For example, if the alpha channel value is x, the red, green and blue channels must be multiplied by x and divided by 0xff before the call.
Видел что люди зачем-то пытаются "вернуть обратно" придумывая Un_Premult_BMP(), но такое преобразование будет с потерями и только мешаться.
Цитата:
связано с гаммой, которую тоже нужно передавать в функцию
Не понял что имеется ввиду. Если про _BLENDFUNCTION.SourceConstantAlpha - то оставьте его 255.
Цитата:
после использования функции Premult_BMP частично прозрачные элементы на картинке становятся темнее
Как раз наоборот - если загрузить 32-bit картинку и выводить через эти функции без Premult_BMP() - получится будто контраста подкрутили выше, плюс могут быть левые артефакты.
Возможно у вас где-то лишний раз вызывается Premult_BMP().

Сам не изучал, и точно не назову как именно, но слышал что GDI+ умеет работать и с сокращённой и с полной формулами. Есть вероятность что с ней не потребуется Premult_BMP().
ResourceSpace вне форума Ответить с цитированием
Старый 19.08.2015, 19:25   #33
Bruce Wayne
Пользователь
 
Регистрация: 08.07.2015
Сообщений: 21
Хорошо

Благодарю, снова меня выручаете! Действительно, дело было в повторном вызове функции, а насчёт артефактов - убедился в этом сам Спасибо ещё раз за помощь и информацию
Bruce Wayne вне форума Ответить с цитированием
Старый 23.01.2016, 12:15   #34
John_Rambo
Новичок
Джуниор
 
Регистрация: 23.01.2016
Сообщений: 1
Вопрос

А не подскажете, как можно выводить текст поверх всех этих картинок?

Последний раз редактировалось John_Rambo; 23.01.2016 в 12:17.
John_Rambo вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
AlphaBlend: наложить bmp на jpg или наоборот fredwriter Помощь студентам 2 17.09.2012 19:28
Полупрозрачный DIV X@OC HTML и CSS 3 18.04.2011 08:54
полупрозрачный слой voldemen HTML и CSS 1 14.09.2010 22:14
Добавить точечному рисунку альфа канал, что бы рисунок воспринимался функцией AlphaBlend Son Мультимедиа в Delphi 3 11.02.2010 16:46
Как наложить полупрозрачный рисунок поверх видео. jocry Мультимедиа в Delphi 3 03.11.2009 09:22