Корректировка цветов DisplayObject

Flash Player 9 и более поздних версий, Adobe AIR 1.0 и более поздних версий

Для корректировки цвета экранного объекта можно воспользоваться методами класса ColorTransform (flash.geom.ColorTransform). У каждого экранного объекта есть свойство transform , которое является экземпляром класса Transform и содержит сведения о различных преобразованиях, применяемых к экранному объекту (например, вращение, изменения масштаба и положения и т. д.) Помимо информации о геометрических преобразованиях класс Transform включает также свойство colorTransform , которое является экземпляром класса ColorTransform и обеспечивает доступ для внесения цветовых корректировок в экранный объект. Чтобы перейти к сведениям о цветовых преобразованиях экранного объекта, можно воспользоваться следующим кодом:

var colorInfo:ColorTransform = myDisplayObject.transform.colorTransform;

После создания экземпляра ColorTransform можно считать его значения свойств, чтобы выяснить, какие преобразования цветов уже применены, либо задать эти значения, чтобы внести цветовые корректировки в экранный объект. Чтобы обновить экранный объект после внесения любых изменений, можно повторно назначить экземпляр ColorTransform свойству transform.colorTransform .

var colorInfo:ColorTransform = myDisplayObject.transform.colorTransform; 
 
// Make some color transformations here. 
 
// Commit the change. 
myDisplayObject.transform.colorTransform = colorInfo;

Установка значений цвета с помощью кода

Свойство color класса ColorTransform можно использовать для присвоения экранному объекту значения цвета RGB (красный, зеленый, синий). Свойство color используется в следующем примере для замены цвета экранного объекта square синим, когда пользователь нажимает кнопку blueBtn :

// square is a display object on the Stage. 
// blueBtn, redBtn, greenBtn, and blackBtn are buttons on the Stage. 
 
import flash.events.MouseEvent; 
import flash.geom.ColorTransform; 
 
// Get access to the ColorTransform instance associated with square. 
var colorInfo:ColorTransform = square.transform.colorTransform; 
 
// This function is called when blueBtn is clicked. 
function makeBlue(event:MouseEvent):void 
{ 
    // Set the color of the ColorTransform object. 
    colorInfo.color = 0x003399; 
    // apply the change to the display object 
    square.transform.colorTransform = colorInfo; 
} 
 
blueBtn.addEventListener(MouseEvent.CLICK, makeBlue);

Учтите, что при изменении цвета экранного объекта с помощью свойства color полностью меняется цвет всего объекта, независимо от того, что раньше его окраска состояла из нескольких цветов. Например, при наличии экранного объекта с зеленым кругом, в верхней части которого есть черный текст, выбор красного оттенка с помощью свойства color для экземпляра ColorTransform этого объекта приведет к заполнению всего объекта (круга и текста) красным цветом (при этом текст станет неотличим от остального содержимого объекта).

Изменение эффектов цвета и яркости с помощью кода

Предположим, что имеется экранный объект с несколькими цветами (например, цифровой снимок), и полностью перекрашивать объект не требуется. Нужно просто скорректировать цвет экранного объекта, исходя из имеющихся цветов. В данном сценарии класс ColorTransform включает ряд свойств умножителя и смещения, которые можно использовать для выполнения этого типа коррекции. Свойства умножителя redMultiplier , greenMultiplier , blueMultiplier и alphaMultiplier действуют как цветные фотофильтры (или окрашенные солнечные очки), усиливая или уменьшая выраженность определенных цветов в экранном объекте. Свойства смещения ( redOffset , greenOffset , blueOffset и alphaOffset ) можно использовать для добавления в объект дополнительных порций того или иного цвета или для указания минимально допустимого значения определенного цвета.

Эти свойства умножителя и смещения идентичны дополнительным установкам цвета, доступным для символов фрагмента ролика в инструменте разработки Flash. К ним можно перейти, выбрав «Дополнительно» во всплывающем меню «Цвет» инспектора свойств.

Следующий код загружает изображение JPEG и применяет к нему преобразование цвета, которое корректирует красный и зеленый каналы по мере перемещения курсора вдоль осей X и Y. В этом случае из-за того, что значения смещения не заданы, значение цвета каждого канала цвета, отображенного на экране, будет выражаться в процентах исходного значения цвета в изображении. Это означает, что по большей части красный и зеленый цвета в любом заданном пикселе будут основаны на исходной доле красного и зеленого цвета в пикселе.

import flash.display.Loader; 
import flash.events.MouseEvent; 
import flash.geom.Transform; 
import flash.geom.ColorTransform; 
import flash.net.URLRequest; 
 
// Load an image onto the Stage. 
var loader:Loader = new Loader(); 
var url:URLRequest = new URLRequest("http://www.helpexamples.com/flash/images/image1.jpg"); 
loader.load(url); 
this.addChild(loader); 
 
// This function is called when the mouse moves over the loaded image. 
function adjustColor(event:MouseEvent):void 
{ 
    // Access the ColorTransform object for the Loader (containing the image) 
    var colorTransformer:ColorTransform = loader.transform.colorTransform; 
     
    // Set the red and green multipliers according to the mouse position. 
    // The red value ranges from 0% (no red) when the cursor is at the left 
    // to 100% red (normal image appearance) when the cursor is at the right. 
    // The same applies to the green channel, except it's controlled by the 
    // position of the mouse in the y axis. 
    colorTransformer.redMultiplier = (loader.mouseX / loader.width) * 1; 
    colorTransformer.greenMultiplier = (loader.mouseY / loader.height) * 1; 
     
    // Apply the changes to the display object. 
    loader.transform.colorTransform = colorTransformer; 
} 
 
loader.addEventListener(MouseEvent.MOUSE_MOVE, adjustColor);