Показать сообщение отдельно
Старый 19.12.2014, 22:11
Gerbert вне форума Посмотреть профиль Найти все сообщения от Gerbert
  № 10  
Ответить с цитированием
Gerbert
Banned

Регистрация: Aug 2014
Сообщений: 461
Немного попробовал и получилось вот что..
Что получилось, я не знаю, но должно смешивать красный и синий.
У меня сиреневый чтоль получился... Какой должен получится цвет?
Код AS3:
package {
import flash.display.Shape;
import flash.display.Sprite;
 
public class Main extends Sprite {
 
        public function Main() {
//            Cc.startOnStage(this, '');
            var color: Number = this.fold10color( this.converter16to10(0xff0000), this.converter16to10(0x0000ff));
 
            var shape: Shape = new Shape( );
            shape.graphics.beginFill( color );
            shape.graphics.drawRect(0,0,100,100);
            shape.graphics.endFill();
            super .addChild(shape);
        }
 
    private function converter16to10( color: uint ): Object
    {
        var chanals10: Object = {};
 
        chanals10.alpha = uint( ( color >>> 24 ) & 0xff );
        chanals10.red   = uint( ( color >>> 16) & 0xff );
        chanals10.green = uint( ( color >>>  8) & 0xff );
        chanals10.blue = uint( color & 0xff );
 
        return chanals10;
    }
 
    private function converter10to16( red: int, green: int, blue: int, alpha: int = 0 ): Number
    {
        var color: Number = ( red << 16 ) + ( green << 8 ) + blue;
 
        if( alpha > 0 ){
            return parseFloat( ( alpha.toString( 16 ) + color.toString( 16 ) ) );
        }
 
        return color;
    }
 
    private function fold10color( colorLeft: Object, colorRight: Object ): Number
    {
        //(255,0,0)+(0,0,255)=((255+0) div 2,(0+0) div 2,(0+255) div 2)=(127,0,127).
        return this.converter10to16( Math.floor( ( colorLeft.red + colorRight.red ) / 2 ), Math.floor( ( colorLeft.green + colorRight.green ) / 2 ), Math.floor( ( colorLeft.blue + colorRight.blue ) / 2 ) );
    }
}
}
Добавлено через 6 минут
Вот статейку ещё сюда вставлю
Цитата:
Градиентная заливка и сложение цветов

Градиентная заливка и сложение цветов.

Иногда бывает нужно сложить два или более цветов для получения что-то типа переходного цвета.
Делается это весьма просто. Координаты получаемого цвета будут равны среднему значению
соответствующих координат всех цветов.

Например, нужно сложить красный и синий. Получаем
(255,0,0)+(0,0,255)=((255+0) div 2,(0+0) div 2,(0+255) div 2)=(127,0,127).

В результате получаем сиреневый цвет. Та2: сложить соответствующие координаты,
потом каждую сумму разделить нацело на количество цветов.

Поговорим теперь о градиентной заливке. Градиентная заливка - это заливка цветом с плавным
переходом от одного цвета к другому.

Итак, пусть заданы 2 цвета своими координатами ((a1, a2, a3) и (b1, b2, b3)) и
линия (длиной h пикселов), по которой нужно залить. Тогда каждый цвет каждого пиксела,
находящегося на расстоянии x пикселов от начала будет равен
(a1-(a1-b1)/h*x, a2-(a2-b2)/h*x, a3-(a3-b3)/h*x). Теперь, имея линию с
градиентной заливкой, можно таким образом залить
совершенно любую фигуру: будь то прямоугольник, круг или просто произвольная фигура.

Вот как выглядит описанный алгоритм:

{Считается, что координаты первого цвета равны (a1, a2, a3), а второго (b1, b2, b3)}
{Кроме того, линия начинается в координатах (x1,y1), а заканчивается в (x2,y1)}

var h,i: integer;

begin
h:=x2-x1-1;
for i:=0 to h do begin
paintbox1.canvas.pen.color:=rgb(a1-(a1-b1)/h*i, a2-(a2-b2)/h*i, a3-(a3-b3)/h*i);
paintbox1.canvas.pen.rectangle(i,y1,i+1,y1);
end;
end.
статейка