Добавление маски к гибкому изображению

#apache-flex #flex4

#apache-flex #flex4

Вопрос:

У меня есть следующий mxml:

 <s:Image source="@Embed(source='my/path/to/img.png')" >
  <flex:mask>
    <s:Group alpha="0.1">
      <s:Rect width="129" height="123">
        <s:fill>
          <s:SolidColor color="0x00FFFF"/>
        </s:fill>
      </s:Rect>
    </s:Group>
  </flex:mask>
</s:Image>
  

Разве этот код не должен генерировать прямоугольную маску размером 129 пикселей * 123 пикселя, которая создаст эффект обрезки?

Спасибо.

Комментарии:

1. Что flex:mask ? Пользовательский компонент?

2. @jason Это часть Flex. Когда я щелкаю по нему с помощью cmd, я получаю сообщение «Не удалось найти исходный код для flash.display. DisplayObject.mask»

Ответ №1:

Проблема в том, что объект mask должен быть уже создан И добавлен в список отображения к моменту его установки в качестве маски. Итак, ваш код должен быть изменен, чтобы отразить это, примерно так:

 <s:Group id="imageMask" alpha="0.1">
  <s:Rect width="129" height="123">
    <s:fill>
      <s:SolidColor color="0x00FFFF"/>
    </s:fill>
  </s:Rect>
</s:Group>

<s:Image source="@Embed(source='my/path/to/img.png')" mask="{imageMask}" />
  

Хорошего дня.

Ответ №2:

Это работает для BitmapImage . Image имеет свою собственную BitmapImage внутреннюю ImageSkin часть.

Создайте обложку, установите skinClass :

 <s:Image source="@Embed(source='my/path/to/img.png')" 
         skinClass="MyImageSkin"/>
  

и внутри MyImageSkin найдите BitmapImage и установите маску:

 <!--- Primary image display skin part. -->
<s:BitmapImage id="imageDisplay" left="0" top="0" right="0" bottom="0">
    <s:mask>
       <s:Group alpha="0.1">
            <s:Rect width="129" height="123">
                <s:fill>
                    <s:SolidColor color="0x00FFFF"/>
                </s:fill>
            </s:Rect>
        </s:Group>
    </s:mask>
</s:BitmapImage>
  

Ответ №3:

Это должно сработать.

 <s:Image source="@Embed(source='my/path/to/img.png')" >
  <s:mask>
    <s:Group alpha="0.1">
      <s:Rect width="129" height="123">
        <s:fill>
          <s:SolidColor color="0x00FFFF"/>
        </s:fill>
      </s:Rect>
    </s:Group>
  </s:mask>
</s:Image>
  

s:mask является свойством изображения и будет использовать внутренний FXG в качестве маски.
Альфа не будет иметь никакого значения, если вы не установите для свойства MaskType=»» значение alpha (для clip, свойства по умолчанию, оно либо видно, либо нет).

Комментарии:

1. Да, это должно быть, единственная проблема в том, что это не так… Маску необходимо создать до того, как она будет фактически установлена таким образом (как маска).