Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   программно adjust color, saturation в 0 (http://www.flasher.ru/forum/showthread.php?t=102316)

Chas 12.10.2007 15:03

программно adjust color, saturation в 0
 
хочу обесцветить мувик. программно.
для этого, я так понимаю, в filters добавляется ColorMatrixFilter. только какую матрицу ему писать я просто не представляю =((( это не так очевидно, как с Colortransform =(((

screamge 12.10.2007 15:06

Обесцветить == сделать чёрно-белой?

Chas 12.10.2007 15:16

да, как в теме указано - насыщение цветом в 0

screamge 12.10.2007 15:20

Код:

import flash.filters.ColorMatrixFilter;
import mx.events.EventDispatcher;
import mx.utils.Delegate;

class com.screamge.effects.Tint {
        public var addEventListener:Function;
        private var dispatchEvent:Function;
        private var __mc:MovieClip;
        private var __des:Number = 0.01;
        private var __desaturation:Number = 0;
       
        public function Tint(mc:MovieClip) {
                EventDispatcher.initialize(this);
                __mc = mc;
                tinter ();
        }
       
        public function set des (num:Number):Void {
                __des = num;
        }
       
        public function Back ():Void {
                __mc.onEnterFrame = Delegate.create (this, this.BackTint);
        }       
       
        private function BackTint ():Void {
                __desaturation -= __des;
                __mc.filters = new Array(getDesaturationFilter(__desaturation));
                if (__desaturation <= 0){
                        delete __mc.onEnterFrame;
                                dispatchEvent ({type:'onFinish'});
                }
        }
       
        private function getDesaturationFilter(t:Number):ColorMatrixFilter {
                t = t ? t : 1;
                var r:Number = 0.212671;
                var g:Number = 0.715160;
                var b:Number = 0.072169;
                return new ColorMatrixFilter([t*r+1-t, t*g, t*b, 0, 0, t*r, t*g+1-t, t*b, 0, 0, t*r, t*g, t*b+1-t, 0, 0, 0, 0, 0, 1, 0]);
        }
       
        private function tinter():Void {
                __mc.onEnterFrame = Delegate.create (this, this.onEnterHandle);
        }
       
        private function onEnterHandle ():Void {
                __desaturation += __des;
                __mc.filters = new Array(getDesaturationFilter(__desaturation));
                if (__desaturation >= 1){
                        delete __mc.onEnterFrame;
                        dispatchEvent ({type:'onFinish'});
                }
        }       
}

Надеюсь разберёшьсь :)

Chas 12.10.2007 15:29

разобрался.
все классно, только, блин, ну откуда ты взял вот эти числа??
Код:

        var r:Number = 0.212671;
        var g:Number = 0.715160;
        var b:Number = 0.072169;
        return new ColorMatrixFilter([t*r+1-t, t*g, t*b, 0, 0, t*r, t*g+1-t, t*b, 0, 0, t*r, t*g, t*b+1-t, 0, 0, 0, 0, 0, 1, 0]);


screamge 12.10.2007 15:36

Полегче спроси что-нибудь :) Это переделанный под класс фрейм код, писал давно так что линк на оригинал врядли найду.

Fernando Costa 12.10.2007 18:04

у __etc на сайте есть класс извращений с цветом - там есть такое

etc 12.10.2007 18:14

http://etcs.ru/blog/as2/ru/etcs/filters/colorfilter/

Wolsh 12.10.2007 22:54

Ну в целом для обесцвечивания достаточно этого
Код:

import flash.filters.ColorMatrixFilter;
var myColorMatrix_filter:ColorMatrixFilter = new ColorMatrixFilter([0.3, 0.59, 0.11, 0, 0, 0.3, 0.59, 0.11, 0, 0, 0.3, 0.59, 0.11, 0, 0, 0, 0, 0, 1, 0]);
my_mc.filters = [myColorMatrix_filter];



Часовой пояс GMT +4, время: 06:06.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.