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