Я использую Graphics32 для обработки изображений. Рассматривая его возможности, мне кажется, что я еще не видел правильной реализации обтравочной маски. Я вижу, что термин «обрезка» появляется здесь и там, но, похоже, он ссылается на что-то еще.Создание обтравочной маски с использованием Graphics32
Проще говоря, мне нужно, чтобы один слой функционировал как «подглядывающее отверстие» к другому; слой A должен проецироваться на слой B, но только там, где видны B. (Я больше не вижу необходимости переопределять, что такое обтравочная маска.)
Если бы это был только растровый рисунок этого другого слоя, который я бы хотел представить, это было бы не так сложно сделать - тогда я мог бы используйте this trick - но то, что усложняет ситуацию, заключается в том, что растровое изображение слоя не говорит о том, что будет отображаться слоем; слой может быть:
- (частично) невидимый (когда вне поля зрения)
- перемещено/растянутый + опционально передискретизируется
- повернут
без каких-либо воздействий на его битовой карте.
Действительно ли это так, что для этого нет готовой реализации? Любые предложения для этого?
Прогресс
Я нашел несколько полезных элементов в источнике Graphics32. Например, с помощью этой декларации:
type
TLayerAccess = class(TBitmapLayer);
, чтобы получить доступ к защищенным методам, я могу назвать TLayerAccess(ABitmapLayer).Paint(ABitmap32)
иметь только этот слой окрашен в растровое изображение, точно так, как это было бы на экране.
graphics32 использует только 32-битные растровые изображения, и это альфа-канал растрового изображения, который используется для смешивания. Я не знаю другого альфа-поля, которое вы можете использовать (например, область отсечения и т. Д.). У вас есть еще одна «мастер-альфа». Я бы. 1. определить альфа-растровое изображение (все белые, альфа-канал - это обтравочный путь в растровых координатах), умножить исходное растровое изображение на это, а затем отобразить растровое изображение в пункт назначения. –
Как вы определяете, какие части слоя B видны? – iamjoosy
@iamjoosy Я могу увидеть его, когда он нарисован на контейнере (TImage32). –