Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
 Аватар для GoodWeather
886 / 588 / 179
Регистрация: 28.02.2017
Сообщений: 2,359
Записей в блоге: 1

AlphaBlend() & BLENDFUNCTION: какой функционал был убран из документации? Почему? Работает ли он сегодня?

17.01.2020, 23:00. Показов 2038. Ответов 2

Студворк — интернет-сервис помощи студентам
Есть такая структура: BLENDFUNCTION(ru)
  • Со вторым полем, BlendFlags - всё чётко и понятно:
    Must be zero.
    Должно быть строго равно нулю. Хорошо, будет сделано. Хотя я никогда не понимал зачем так делать - объявлять что-то без функциональности, а потом требовать строгого фиксированного значения...
  • С третьим полем, SourceConstantAlpha - тоже описано всё чётко и ясно, хоть и много текста.
  • А вот первое поле, BlendOp - описано как:
    Currently, the only source and destination blend operation that has been defined is AC_SRC_OVER.
    То есть "в настоящее время единственный возможное значение" AC_SRC_OVER, которое по факту равно нулю. И почему же так странно сформулировано? Почему не написали так же как было у второго поля: "должно быть строго равно нулю"?
  • И последнее поле, AlphaFormat - сформулировано ещё веселее:
    AlphaFormat has the following value.
    { таблица из одной единственной строки }
    То есть "оно имеет вот такое вот значение". Не "должно быть таким", не "может быть такими-то", а просто "имеет значение". И в виде таблицы показан единственный вариант - AC_SRC_ALPHA (который по факту равен единице).
Хотелось бы восстановить пробелы в информации. Вдруг кто-то что-то помнит/знает.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.01.2020, 23:00
Ответы с готовыми решениями:

Почему-то все время показывает самый последний вариант, независимо от того, ид какой новости был получен...
Доброе утречко! Есть страница с новостями , при нажатии на новость , вылазит модальное окно , и показывает саму новость , я проверяю...

Почему friend ostrem& operator <<(ostream& outs, const Rational&); - invalid function declaration?
Пытаюсь скомпилировать программу пишет friend ostrem&amp; operator &lt;&lt;(ostream&amp; outs, const Rational&amp;); - invalid function declaration. ...

почему не работает скрипт в Chrome & Firefox'e
Прошу помочь разобраться почему не работает скрипт в хроме и файерфоксе ( не происходит переход со страницы 1 на страницу 2 в фрейме), при...

2
 Аватар для GoodWeather
886 / 588 / 179
Регистрация: 28.02.2017
Сообщений: 2,359
Записей в блоге: 1
17.01.2020, 23:02  [ТС]
Окей, про первое поле мы можем предположить, что в какой-то период времени, либо были другие варианты, либо их планировалось ввести. Но давайте вчитаемся в "Remarks", и найдём ещё странностей:
  • When the BlendOp member is AC_SRC_OVER, the source bitmap is placed over the destination bitmap based on the alpha values of the source pixels.
    Дак написали же что AC_SRC_OVER это единственное возможное значение BlendOp! Что тогда значит "когда BlendOp равно AC_SRC_OVER"? Оно ж всегда ему равно!
    Кстати, даже если закрыть глаза на формулировку - данное утверждение просто-напросто не верно: будет ли операция "базироваться на alpha от source pixels" или нет - зависит от совершенно другого поля.
  • When the AlphaFormat member is AC_SRC_ALPHA, the source bitmap must be 32 bpp. If it is not, the AlphaBlend function will fail.
    А разве выше не было сказано что AlphaFormat просто "имеет значение" AC_SRC_ALPHA? И никаких других вариантов не указано и не упомянуто? Значит оно всё же может иметь другие значения? Какие? Почему об них вообще ни слова? Но всё же тут можно догадаться, хотя бы по "..this flag.." и "..is not set.." - AlphaFormat это оказывается не "просто константа", а набор флагов. Но тогда наверное не "когда AlphaFormat равен AC_SRC_ALPHA", а "когда установлен флаг"?
    А какие особенности если он не установлен? Есть ли ещё какие-то возможные флаги?
Документация словно не полная. Где-то можно взять более старые версии документации MSDN? Сравнить бы хотелось...
0
 Аватар для GoodWeather
886 / 588 / 179
Регистрация: 28.02.2017
Сообщений: 2,359
Записей в блоге: 1
18.01.2020, 00:57  [ТС]
В текущих версиях VC++ объявлено:
C++
1
2
3
4
// currentlly defined blend function
#define AC_SRC_OVER                 0x00
// alpha format flags
#define AC_SRC_ALPHA                0x01
И всё. Больше ничего.
А в текущих версиях Делфи это же самое описывается как:
Delphi
1
2
3
4
5
6
7
8
9
const
  { currentlly defined blend function }
  AC_SRC_OVER             = $00;
  AC_SRC_ALPHA            = $01;
  { alpha format flags }
  AC_SRC_NO_PREMULT_ALPHA = $01;
  AC_SRC_NO_ALPHA         = $02;
  AC_DST_NO_PREMULT_ALPHA = $10;
  AC_DST_NO_ALPHA         = $20;
Но если покопаться в Гугле... Вероятно в каких-то старых версиях VC++ было вот так:
C++
1
2
3
4
5
6
7
// currentlly defined blend function
#define AC_SRC_OVER                 0x00
// alpha format flags
#define AC_SRC_NO_PREMULT_ALPHA     0x01
#define AC_SRC_NO_ALPHA             0x02
#define AC_DST_NO_PREMULT_ALPHA     0x10
#define AC_DST_NO_ALPHA             0x20
А никаких AC_SRC_ALPHA раньше как раз не существовало.

Тогда видимо в заголовочниках Делфи немного попутали - AC_SRC_ALPHA надо было писать секцией ниже, а четыре устаревших флага или не писать или явно пометить устаревшими.

Учитывая что все флаги с именами вида AC_*_NO_* просто пропали, а значения пропавшего AC_SRC_NO_PREMULT_ALPHA и появившегося AC_SRC_ALPHA одинаковы...
...могу предположить, что AC_SRC_NO_PREMULT_ALPHA был переименован в AC_SRC_ALPHA, а остальные три флага объявлены как deprecated и убраны из заголовочных файлов.

На каких версиях ОС/API официально присутствовали и работали эти флаги? Что именно они делали? И работает ли это до сих пор?
Особенно любопытно наличие/отсутствие подстроки "PREMULT" во флагах...

Как опознать когда оно изначально появилось и когда оно изменялось? Я пока смог раскопать только такую цитату:
Параметр AC_SRC_NO_PREMULT_ALPHA не описан в MSDN за январь 2000 года и найден экспериментально
При его задании используется альфа-канал растра источника и не используется альфа-канал приемника
Добавлено через 1 час 35 минут
Old constant nameValueNew name
AC_SRC_NO_PREMULT_ALPHA
DecimalHex C++Hex PascalHex Visual Basic
10x01$01&H1
AC_SRC_ALPHA
AC_SRC_NO_ALPHA
DecimalHex C++Hex PascalHex Visual Basic
20x02$02&H2
*deprecated*
AC_DST_NO_PREMULT_ALPHA
DecimalHex C++Hex PascalHex Visual Basic
160x10$10&H10
*deprecated*
AC_DST_NO_ALPHA
DecimalHex C++Hex PascalHex Visual Basic
320x20$20&H20
*deprecated*

Добавлено через 16 минут
Итак, на данный момент известно:
BlendOpBlendFlagsSourceConstantAlphaAlphaFormat
Old headers:
Возможные значения:
AC_SRC_OVER
Возможные значения:
0
Целое число от 0 до 255*A combination (???) of the following values:
Возможные флаги:Описание:
0No flags; ???
AC_SRC_NO_PREMULT_ALPHA???
AC_SRC_NO_ALPHA???
AC_DST_NO_PREMULT_ALPHA???
AC_DST_NO_ALPHA???
New headers:
Возможные значения:
AC_SRC_OVER
Возможные значения:
0
Целое число от 0 до 255*A combination (zero or more) of the following values:
Возможные флаги:Описание:
0No flags; Изображение может быть не 32-битным; ???
AC_SRC_ALPHAНакладываем строго 32-битное изображение; ???

*) Если вы выводите полупрозрачное изображение, то есть "с попиксельной альфой", то есть "как полупрозрачные PNG-картинки" - тогда SourceConstantAlpha рекомендуется устанавливать только в 255.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.01.2020, 00:57
Помогаю со студенческими работами здесь

query='SELECT * FROM resume WHERE ' & ''' & RecSet('place')& ''' & '=' & '''& s_loc &''' & - что не так?
упростил для краткости запрос. в чем ошибка? RecSet - это коннекшн. query='SELECT * FROM resume WHERE ' &amp; ''' &amp;...

K&R задание 1.9 Решение с использованием символьного массива, почему не работает?
Здравствуйте! Изучаю язык и азы программирования по книге Ритчи. В ней встречается такое задание. Конечно, его можно просто решить через...

Как узнать был сегодня бот на сайте или нет?
Как узнать был сегодня бот на сайте или нет? И сколько страниц проиндексировано за день.

Почему используется *& вместо простого указателя и как это работает?
может кто-нибудь объяснить почему используется *&amp; вместо простого указателя и как это работает? конкретно у метода D class proizvodcl :...

Какой софт использовать для документации проекта
Подскажите пожалуйста, пишу оконное приложение, с использованием СУБД Firebird, которое нужно задокументировать. Пробовал doxygen, но он...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru