SR2D: Как непрозрачной картинке добавить альфа-маску?

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1681
Зарегистрирован: 23.01.2008 (Ср) 14:35

SR2D: Как непрозрачной картинке добавить альфа-маску?

Сообщение arthur2 » 01.07.2019 (Пн) 7:23

Mikle
Есть серая маска, символизирующая альфа-канал. Как её наложить на существующую картинку. И обратная операция - есть картинка с альфа-каналом - как выделить серую картинку, пиксели которой символизировали бы альфа-канал? Можно просто перебором, но мне кажется, что что-то подобное уже встроено?

И как лучше - все вопросы по SR2D складывать в одну тему или лучше для каждого вопроса создать свою?
Артур
 
   

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 3913
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: SR2D: Как непрозрачной картинке добавить альфа-маску?

Сообщение Mikle » 01.07.2019 (Пн) 8:35

arthur2 писал(а):Есть серая маска, символизирующая альфа-канал. Как её наложить на существующую картинку.

То есть сделать, чтобы пиксели с заданным цветом стали прозрачными? Если я верно понял вопрос, то тебе нужен метод AddColorKey.
arthur2 писал(а):обратная операция - есть картинка с альфа-каналом - как выделить серую картинку, пиксели которой символизировали бы альфа-канал?

Тут лучше всего подойдёт MaskClearBuffer:
Код: Выделить всё
SprBack.MaskClearBuffer SprA, 0, 0, Color, ARGB(128, 0, 0, 0), NotMask

SprA - исходный спрайт с альфаканалом.
Color - цвет, которым закрашиваем.
Чтобы закрасить SprBack там, где в SprA непрозрачные участки, NotMask = False или вообще пропускаем. Чтобы прозрачные NotMask = True.
arthur2 писал(а):все вопросы по SR2D складывать в одну тему или лучше для каждого вопроса создать свою?

Если небольшие вопросы, типа этих, то можно всё спрашивать в одной (этой) теме.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1681
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: SR2D: Как непрозрачной картинке добавить альфа-маску?

Сообщение arthur2 » 01.07.2019 (Пн) 8:53

Не, я имею ввиду постепенное изменение прозрачности. Есть серая 8-битная картинка массивом байтов, каждый из которых символизирует А в АRGB.
Артур
 
   

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 3913
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: SR2D: Как непрозрачной картинке добавить альфа-маску?

Сообщение Mikle » 01.07.2019 (Пн) 9:11

Можно любой цветовой канал перемещать между спрайтами:
Код: Выделить всё
Spr1.MoveByte Spr2, 0, 0, ChRed, ChAlpha

Красный канал спрайта Spr2 помещается в альфаканал спрайта Spr1.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1681
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: SR2D: Как непрозрачной картинке добавить альфа-маску?

Сообщение arthur2 » 01.07.2019 (Пн) 9:21

Круто!!!
Артур
 
   

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1681
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: SR2D: Как непрозрачной картинке добавить альфа-маску?

Сообщение arthur2 » 01.07.2019 (Пн) 9:25

А если у картинок разные размеры, это сработает? И если маска меньше картинки, какими тогда станут не перекрытые маской области?
Артур
 
   

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 3913
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: SR2D: Как непрозрачной картинке добавить альфа-маску?

Сообщение Mikle » 01.07.2019 (Пн) 11:57

Картинки могут быть разных размеров, метод сработает только для перекрывающейся части с учётом входных параметров-координат, например, так:
Изображение
Это касается всех методов SR2D, оперирующих двумя или тремя спрайтами. Исключение, вполне понятное - SRCCol в DrawEBM.
Неперекрытые области не меняются.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1681
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: SR2D: Как непрозрачной картинке добавить альфа-маску?

Сообщение arthur2 » 01.07.2019 (Пн) 19:35

Огромное спасибо! И за объяснение, и особенно за саму библиотеку :)
Артур
 
   


Вернуться в Мультимедиа

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 2

    TopList