4.5. A színválasztó eszköz

iDevice ikon

// colorPicker színválasztás
picker_mc.useHandCursor = false; //(*41)
picker_mc.onRelease = function() {
    // új BitmapData-t hozunk létre és ebbe 'bemásoljuk' a picker_mc-t (*42)
    pickerBitmap = new flash.display.BitmapData(80, 45, false, 0xFFFFFFFF);
    pickerBitmap.draw(this);
    // a getPixel segítségével a klikkeléskor érvényes egérpozíciónak megfelelő
    // helyen levő pixel színértékeit tudjuk leolvasni (*43)
    hexCode = pickerBitmap.getPixel(this._xmouse, this._ymouse).toString(16);
    while (hexCode.length<6) {
        hexCode = "0"+hexCode;
    }
    _global.penColor = "0x"+hexCode;
    pickerBitmap.dispose();
};


*41 - az adott pixel lekérdezéséhez a picker_mc-t, mint gombot fogjuk használni, ám a falhasználói félreértések (és mert a kurzornyíl hegye pontosabb kiválasztást biztosíthat, mint a kéz-ikon mutatóujja), letiltjuk a kéz-ikon használatot.
*42 - ahhoz, hogy egy létező kép egy pixeljének színértékeit le tudjuk olvasni, szükségünk lesz a BitmapData osztály bizonyos metódusaira. az új Bitmapdata példány megadásakor annak méretét a picker_mc méretével azonosan veszzük fel, jelen esetben átlétszóságra nincs szükségünk, a háttér szine pedig lényegében indiferens, mivel a draw() metódussal a picker_mc képi megjelenését torzítatlan formában tudjuk a csak virtuálisan létező BitmapData példányunkba illeszteni.
*43 - a getpixel() segítségével az épp aktuális _xmouse, _ymouse koordinátákon lévő pixel RGB adatait olvashatjuk le, Ahhoz, hogy ezt az értékez hexadecimális formában (RRGGBB) kapjuk meg, a toString(16) metódussal kell átkonvertánunk. Az így kapott hexCode változóval kapcsolatban még egy apró trükkre is szükségünk lesz, hogy ha a konverzió nem hat karakteres értéket ad vissza (mert a kezdő érték(ek) 0 értékűek), akkor ezeket egy while ciklusban pótoljuk. Ettől kezdve a globális penColor változónk ezt az új értéket tartalmazza, értelemszerűen a szükséges "0x" előtaggal.
Flash memória használati szempontból a már nem hazsnált virtuális BitmapDatánkat érdemes 'kiüríteni', ezt a dispose() metódussal tehetjük meg.