Я пишу простой мультиплатформенный графический интерфейс на языке C для собственного использования. Под Windows я использую GDI API для рисования. Мой вопрос касается возможного использования альфа-компонента цветов для функции маскированного блита, которую я хочу реализовать. К вашему сведению, я знаком с функцией MaskBlit GDI, но ее описание совершенно непонятно для простых смертных, и в качестве маски используется отдельное монохромное растровое изображение.
В документации MS указано, что для GDI тип данных COLORREF - 0x00bbggrr, а самый верхний байт ДОЛЖЕН всегда быть нулевым. Насколько строго это правило? Будет ли GDI использовать (копировать) растровое изображение, в котором значения альфа-канала не равны нулю, или он будет отклонен?
@HansPassant: Спасибо, GDI + кажется решением. У меня есть один файл со всеми изолированными функциями рисования, зависящими от ОС, их можно легко преобразовать для использования GDI +. Хотя мне очень не нравится C++ ... :(
По сути, это C api. Microsoft не могла представить, что кто-то предпочтет это. И я нет. docs.microsoft.com/en-us/windows/desktop/gdiplus/…
... как и GTK + - это C API (хотя и объектно-ориентированный). Не все, что имеет суффикс +, по умолчанию предоставляет C++ API. (Для GTK + аналог C++ называется gtkmm.)
Вы имеете ввиду MaskBlt? Также попробуйте AlphaBlend или TransparentBlt, если вам просто нужна альфа. Но у GDI + гораздо больше плюсов.





GDI восходит к каменному веку, по сути это апи на 24 бита на пиксель. GDI + добавил поддержку альфа, заголовка gdiplus.h.