Как оживить через радугу цветов на растровом изображении - PullRequest
0 голосов
/ 16 сентября 2011

У меня есть растровое изображение (bitmapData), которое мне бы хотелось, чтобы оно со временем меняло цвета.Я видел примеры применения цветового преобразования и не мог заставить его работать.Кроме того, с этими примерами они применяют только один цвет.Я хотел бы оживить через диапазон ROYGBIV.Примечание. Я загружаю изображения динамически.Я не хочу тонировать изображение. Я хочу, чтобы цвет на изображении изменился, если это имеет смысл.

Ответы [ 2 ]

1 голос
/ 16 сентября 2011

Чтобы манипулировать / подкрашивать цвета, вы должны использовать функцию colorTransform

Для иллюстрации:
В приведенном ниже примере я встраиваю изображение и ссылаюсь на него, если вы используете Adobe Flash, вы бы назвали свой ресурс и сослаться на него в своем коде.

    import flash.geom.ColorTransform;
    import flash.events.Event;
    import flash.display.Bitmap;

    [Embed(source="img/logo.png")] private var logoCls:Class;
    private var bitmapLogo:Bitmap = new logoCls();

    public function Test()
    {
        addEventListener(Event.ADDED_TO_STAGE, init);
        addEventListener(Event.ENTER_FRAME, onEnterFrame);
    }

    private function init(e:Event):void
    {
        removeEventListener(Event.ADDED_TO_STAGE, init);
        addChild(bitmapLogo);
    }

    // r, g, b colors
    var r:int = 256; // start at Red
    var g:int = 0;
    var b:int = 0;
    var increment:int = 16; // how quickly to change the color
    var colorCycle:int = 0; 
    var mult:Number = 0.25; // How heavily TINTED you want the image

    private function onEnterFrame(e:Event):void
    {
        var ct:ColorTransform = new ColorTransform (1-mult,1-mult,1-mult,1,r*mult,g*mult,b*mult,0);
        bitmapLogo.transform.colorTransform = ct;
        incrementRainbowColors();
    }
    private function incrementRainbowColors():void
    {
        if (colorCycle == 0) // -> yellow
            if ((g+=increment) >= 256) colorCycle=1;
        else if (colorCycle == 1) // -> green
            if ((r-=increment) <= 0) colorCycle=2;
        else if (colorCycle == 2) // -> cyan
            if ((b+=increment) >=256) colorCycle=3;
        else if (colorCycle == 3) // -> blue
            if ((g-=increment) <= 0) colorCycle = 4;
        else if (colorCycle == 4) // -> magenta
            if ((r+=increment) >=256) colorCycle = 5;
        else if (colorCycle == 5) // -> red
            if ((b-=increment)<=0) colorCycle = 0;
    }

}
1 голос
/ 16 сентября 2011

Вы сказали, что работаете с bitmapData, поэтому в этом ответе предполагается, что вы можете / хотите напрямую манипулировать им.

Вы можете использовать bitmapData.setPixel(row, column, color);, чтобы изменить цвет пикселя.строка и столбец основаны на 0 и представляют точно, какой пиксель нужно изменить - думайте об этом, как о сетке, если вы никогда не сталкивались с этим раньше.Параметр цвета на самом деле представляет собой целое число без знака.Вы можете использовать шестнадцатеричное значение, например 0x000000, чтобы установить пиксель в черный цвет, а 0xFFFFFF - в белый.

Чтобы чередовать цвета, вы можете просто перебирать различные значения для uint.Есть 16777215 различных возможных значений для цветов, и я, честно говоря, мало что знаю о шестнадцатеричных цветах - я просто гуглю нужный цвет.

Но вот небольшой совет, если вы склонны к математике: каждая точка в шестнадцатеричном числе соответствует степени 16 этой точки * действительное число в этой точке в десятичном виде.Я, вероятно, сформулировал это неправильно, поэтому вот наглядный пример: 456789 в шестнадцатеричном виде (4 * 16 ^ 5) + (5 * 16 ^ 4) + (6 * 16 ^ 3) + (7 * 16 ^ 2) + (8 * 16 ^ 1) + (9 * 16 ^ 0) в десятичном виде, что равно 4548489.

Первые 2 точки (слева) соответствуют красному, затем синему, затем зеленому.поэтому FF0000 - красный, 00FF00 - зеленый, а 0000FF - синий.Вы можете (я думаю) предоставить десятичное значение для цвета в функции setPixel, так что вы можете сделать (или найти онлайн) некоторые преобразования, чтобы получить нужный вам цвет / перебрать цвета в шаблоне в стиле радуги!

Я надеюсь, что этот случайный ускоренный курс на Hex был полезен: P

...