调整 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;

使用代码设置颜色值

ColorTransform 类的 color 属性可用于为显示对象分配具体的红、绿、蓝 (RGB) 颜色值。在下面的示例中,当用户单击名为 blueBtn 的按钮时,将使用 color 属性将名为 square 的显示对象的颜色更改为蓝色:

// 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 属性更改显示对象的颜色时,将会完全更改整个对象的颜色,无论该对象以前是否有多种颜色。例如,如果某个显示对象包含一个顶部有黑色文本的绿色圆,将该对象的关联 ColorTransform 实例的 color 属性设置为红色阴影时,会使整个对象(圆和文本)变为红色(因此无法再将文本与该对象的其余部分区分开来)。

使用代码更改颜色和亮度效果

假设显示对象有多种颜色(例如,数码照片),但是您不想完全重新调整对象的颜色,只想根据现有颜色来调整显示对象的颜色。这种情况下,ColorTransform 类包括一组可用于进行此类调整的乘数属性和偏移属性。乘数属性的名分别为 redMultipliergreenMultiplierblueMultiplieralphaMultiplier,它们的作用像彩色照片滤镜(或彩色太阳镜)一样,可以增强或削弱显示对象上的某些颜色。偏移属性(redOffsetgreenOffsetblueOffsetalphaOffset)可用于额外增加对象上某种颜色的值,或用于指定特定颜色可以具有的最小值。

在“属性”检查器上的“颜色”弹出菜单中选择“高级”时,这些乘数和偏移属性与 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);