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.
|
статейка
|