Ajuste de los colores de DisplayObject

Flash Player 9 y posterior, Adobe AIR 1.0 y posterior

Se pueden utilizar los métodos de la clase ColorTransform (flash.geom.ColorTransform) para ajustar el color de un objeto de visualización. Cada objeto de visualización tiene una propiedad transform , que es una instancia de la clase Transform y que contiene información sobre diversas transformaciones que se aplican al objeto de visualización (como la rotación, los cambios en la escala o posición, entre otros). Además de esta información sobre las transformaciones geométricas, la clase Transform también incluye una propiedad colorTransform , que es una instancia de la clase ColorTransform y que permite realizar ajustes de color en el objeto de visualización. Para acceder a la información sobre transformación de color de un objeto de visualización, se puede utilizar código como el siguiente:

var colorInfo:ColorTransform = myDisplayObject.transform.colorTransform;

Una vez creada una instancia de ColorTransform, se pueden leer sus valores de propiedades para saber cuáles son las transformaciones de color que ya se han aplicado o se pueden definir dichos valores para realizar cambios de color en el objeto de visualización. Para actualizar el objeto de visualización después de haber realizado cambios, es necesario reasignar la instancia de ColorTransform a la propiedad transform.colorTransform .

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

Configuración de los valores de color a través del código

La propiedad color de la clase ColorTransform puede utilizarse para asignar un valor específico de color rojo, verde, azul (RGB) al objeto de visualización. En el ejemplo siguiente se usa la propiedad color para cambiar a azul el color del objeto de visualización denominado square , cuando el usuario haga clic en un botón denominado 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);

Cuando se cambia el color de un objeto de visualización a través de la propiedad color , se cambia completamente el color de todo el objeto, independientemente de que el objeto tuviera varios colores. Por ejemplo, si hay un objeto de visualización que contiene un círculo verde con texto negro encima, al definir como una sombra de rojo la propiedad color de la instancia de ColorTransform asociada a dicho objeto, todo el objeto, círculo y texto, se volverá rojo (de modo que el texto ya no podrá distinguirse del resto del objeto).

Modificación de efectos de color y brillo a través del código

Supongamos que tiene un objeto de visualización con varios colores (por ejemplo, una foto digital) y no desea modificar los colores de todo el objeto, sino únicamente ajustar el color de un objeto de visualización basándose en los colores existentes. En esta situación, la clase ColorTransform incluye una serie de propiedades de multiplicador y desplazamiento que pueden utilizarse para realizar este tipo de ajuste. Las propiedades de multiplicador, denominadas redMultiplier , greenMultiplier , blueMultiplier y alphaMultiplier , funcionan como filtros fotográficos de color (o gafas de sol de color), ya que amplifican o reducen determinados colores en el objeto de visualización. Las propiedades de desplazamiento ( redOffset , greenOffset , blueOffset y alphaOffset ) pueden utilizarse para añadir cantidades adicionales de un determinado color al objeto o para especificar el valor mínimo que puede tener un determinado color.

Estas propiedades de multiplicador y desplazamiento son idénticas a la configuración avanzada de color disponible para los símbolos de clip de película en la herramienta de edición de Flash que se muestra al elegir Avanzado en el menú emergente Color del inspector de propiedades.

En el código siguiente se carga una imagen JPEG y se aplica una transformación de color que modifica los canales rojo y verde a medida que el puntero del ratón se mueve por los ejes x e y. En este caso, como no se especifica ningún valor de desplazamiento, el valor de cada uno de los canales de color mostrados en pantalla será un porcentaje del valor de color original de la imagen, lo que significa que la mayoría de rojo y verde mostrado en cualquier píxel será la cantidad original de rojo o verde de dicho píxel.

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);