Dostosowywanie kolorów w klasie DisplayObject

Flash Player 9 i nowsze wersje, Adobe AIR 1.0 i nowsze wersje

Metody klasy ColorTransform (flash.geom.ColorTransform) mogą służyć do dostosowywania kolorów obiektu wyświetlanego. Każdy obiekt wyświetlany ma właściwość transform , która jest instancją klasy Transform i zawiera informacje o różnych transformacjach zastosowanych dla obiektu wyświetlanego (np. obrót, zmiana skali lub położenia itp.). Oprócz informacji o transformacjach geometrycznych klasa Transform zawiera również właściwość colorTransform , która jest instancją klasy ColorTransform i umożliwia dostosowywanie kolorów obiektu wyświetlanego. Aby uzyskać dostęp do informacji o transformacjach koloru obiektu wyświetlanego, należy użyć na przykład poniższego kodu:

var colorInfo:ColorTransform = myDisplayObject.transform.colorTransform;

Po utworzeniu instancji ColorTransform można odczytać wartości jej właściwości w celu określenia transformacji kolorów, jakie zostały już zastosowane lub w celu ustawienia tych wartości i zmiany koloru obiektu wyświetlanego. W celu zaktualizowania obiektu wyświetlanego po zastosowaniu zmian należy ponownie przypisać instancję ColorTransform ponownie do właściwości transform.colorTransform .

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

Ustawianie wartości kolorów za pomocą kodu

Właściwość color klasy ColorTransform może służyć do przypisania określonych wartości RGB (Red, Green, Blue) dla obiektu wyświetlanego. W poniższym przykładzie wykorzystano właściwość color w celu zmiany koloru obiektu wyświetlanego o nazwie square na niebieski, gdy użytkownik kliknie przycisk o nazwie 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);

Należy zauważyć, że zmiana koloru obiektu wyświetlanego za pomocą właściwości color powoduje całkowitą zmianę koloru całego obiektu, bez względu na to, czy obiekt poprzednio zawierał wiele kolorów. Na przykład: jeśli istnieje obiekt wyświetlany zawierający zielony okrąg, na którym widoczny jest czarny tekst, wówczas ustawienie właściwości color (instancji ColorTransform skojarzonej) na odcień czerwieni spowoduje zmianę koloru całego obiektu — okręgu i tekstu — na czerwony (nie będzie możliwości odróżnienia tekstu od reszty obiektu).

Modyfikowanie efektów koloru i jasności za pomocą kodu

Załóżmy, że istnieje obiekt wyświetlany z wieloma kolorami (np. zdjęcie cyfrowe), a użytkownik nie chce zmieniać koloru całego obiektu; wymagane jest tylko dostosowanie koloru obiektu wyświetlanego odpowiednio do istniejących kolorów. W tym scenariuszu klasa ColorTransform zawiera serię właściwości multiplier i offset, które można wykorzystać w celu dostosowania koloru. Właściwości multiplier, o nazwach redMultiplier , greenMultiplier , blueMultiplier i alphaMultiplier , działają jak kolorowe filtry fotograficzne (lub kolorowe okulary), które wzmacniają lub wygaszają określone kolory na obiekcie wyświetlanym. Właściwości offset ( redOffset , greenOffset , blueOffset i alphaOffset ) mogą być używane w celu dodania dodatkowej ilości określonego koloru do obiektu lub w celu określenia minimalnej wartości, jaką dany kolor może przyjąć.

Właściwości multiplier i offset działają tak samo, jak zaawansowane ustawienia koloru, które są dostępne dla symboli klipów filmowych w narzędziu do tworzenia treści Flash (po wybraniu opcji Zaawansowane z menu podręcznego Kolor w Inspektorze właściwości).

Poniższy kod ładuje obraz JPEG i stosuje dla niego transformację koloru, która dostosowuje kanały czerwieni i zieleni w miarę przesuwania kursora wzdłuż osi x i y. W tym przypadku nie określono wartości przesunięć (offset), dlatego wartość koloru każdego kanału koloru widocznego na ekranie będzie wartością procentową oryginalnej wartości koloru na obrazie — to oznacza, że większość czerwieni i zieleni widocznej w każdym pikselu będzie odpowiadało oryginalnej ilości czerwieni lub zielenie w danym pikselu.

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