Actionscript 3 Actionscript颜色选择器
我正在尝试为我的应用程序创建一个Colorpicker控件。我更喜欢纯动作脚本。有人知道如何创建这样的选择器吗:Actionscript 3 Actionscript颜色选择器,actionscript-3,Actionscript 3,我正在尝试为我的应用程序创建一个Colorpicker控件。我更喜欢纯动作脚本。有人知道如何创建这样的选择器吗: 最有趣的是,我对如何绘制渐变感兴趣,因为渐变有一个饱和度,我不确定这是否太准确,但我想我可以给你一些想法: 你可以抓取你正在展示的相同的正方形图像(或者photoshop的图像),然后改变它的色调以获得整个颜色范围 如果你想画它,从数学上来说我不认为这太难。。。例如,对于青色,Y轴应控制所有通道中的最大颜色量,X轴应控制混合中红色的比例。这是我自己使用的选择器,希望它有用: pack
最有趣的是,我对如何绘制渐变感兴趣,因为渐变有一个饱和度,我不确定这是否太准确,但我想我可以给你一些想法: 你可以抓取你正在展示的相同的正方形图像(或者photoshop的图像),然后改变它的色调以获得整个颜色范围
如果你想画它,从数学上来说我不认为这太难。。。例如,对于青色,Y轴应控制所有通道中的最大颜色量,X轴应控制混合中红色的比例。这是我自己使用的选择器,希望它有用:
package lazylib.ui.generated
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.display.GradientType;
import flash.events.MouseEvent;
import flash.geom.ColorTransform;
import flash.geom.Matrix;
import lazylib.broadcast.evts.ColorEvent;
import lazylib.broadcast.Radio;
/**
* ...
* @author www0z0k
*/
public class Picker extends Sprite
{
private var bmpc: Bitmap;
private var bmp:BitmapData;
private var id:String;
private var w:int;
private var h:int;
public static const COLOR_PICKED_EVT_TYPE: String = 'picked by picker';
public function Picker(_id:String, _w:int = 256, _h:int = 256, _x:int = 0, _y:int = 0)
{
id = _id;
w = _w;
h = _h;
x = _x;
y = _y;
bmp = new BitmapData(w, h);
bmpc = new Bitmap(bmp);
addChild(bmpc);
refillBmp(0x7f7f7f);
}
public function get ID():String { return id; }
private function refillBmp(overColor:int = 0x7f7f7f, alphaStep:Number = 0.006):void {
var rtspr:Sprite = new Sprite();
var spr:Sprite = new Sprite();
var colors:Array = new Array(0xff0000,0xff7f00,0xffff00,0x7fff00,0x00ff00, 0x00ff7f, 0x00ffff,0x007fff,0x0000ff, 0x7f00ff,0xff00ff, 0xff007f, 0xff0000);
var alphas: Array = new Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
var ratios: Array = new Array(10, 30, 50, 70, 90, 110, 130, 150, 170, 190, 210, 230, 250);
var matrix:Matrix = new Matrix();
matrix.createGradientBox(w, h);
spr.graphics.beginGradientFill(GradientType.LINEAR, colors, alphas, ratios, matrix);
spr.graphics.drawRect(0, 0, w, h);
spr.graphics.endFill();
rtspr.addChild(spr);
var spr2:Sprite = new Sprite();
rtspr.addChild(spr2);
var startA: Number = 1;
for (var i:int = 0; startA > 0; i++) {
startA -= alphaStep;//orig 0.004!!!
spr2.graphics.lineStyle(1, overColor, startA);
spr2.graphics.moveTo(0, h - i);
spr2.graphics.lineTo(w, h - i);
}
bmp.draw(rtspr, new Matrix());
graphics.beginFill(0, 0);
graphics.drawRect(0, 0, w, h);
graphics.endFill();
buttonMode = true;
addEventListener(MouseEvent.CLICK, onClick);
}
public function adjustDarkness(percent:int):void {
var colorValue: int = int(255 * percent / 100);
var currentGray:int = colorValue + colorValue << 8 + colorValue << 16;
refillBmp(colorValue);
}
private function onClick(e:MouseEvent):void {
var col: int = bmp.getPixel(e.localX, e.localY);
Radio.broadcast(new ColorEvent(COLOR_PICKED_EVT_TYPE + id, col));
dispatchEvent(new ColorEvent(COLOR_PICKED_EVT_TYPE + id, col));
}
}
}
包lazylib.ui.generated
{
导入flash.display.Bitmap;
导入flash.display.BitmapData;
导入flash.display.Sprite;
导入flash.display.GradientType;
导入flash.events.MouseEvent;
导入flash.geom.ColorTransform;
导入flash.geom.Matrix;
导入lazylib.broadcast.evts.ColorEvent;
导入lazylib.broadcast.Radio;
/**
* ...
*@author www0z0k
*/
公共类选择器扩展了Sprite
{
私有变量bmpc:位图;
私有变量bmp:BitmapData;
私有变量id:String;
私有变量w:int;
私有变量h:int;
public static const COLOR_PICKED_EVT_TYPE:String='PICKED by picker';
公共函数选择器(_id:String,_w:int=256,_h:int=256,_x:int=0,_y:int=0)
{
id=_id;
w=_w;
h=_h;
x=x;
y=_y;
bmp=新的位图数据(w,h);
bmpc=新位图(bmp);
addChild(bmpc);
再填充BMP(0x7F7F);
}
公共函数get ID():字符串{return ID;}
专用函数refillBmp(过色:int=0x7f7f7f,alphaStep:Number=0.006):无效{
var rtspr:Sprite=新Sprite();
var spr:Sprite=新Sprite();
变量颜色:数组=新数组(0xff0000,0xff7f00,0xffff00,0x7fff00,0x00ff00,0x00ff7f,0x00ffff,0x007fff,0x0000ff,0x7f00ff,0xff00ff,0xff007f,0xff0000);
var alphas:Array=新数组(1,1,1,1,1,1,1,1,1,1,1,1,1,1);
var比率:阵列=新阵列(10,30,50,70,90,110,130,150,170,190,210,230,250);
var矩阵:矩阵=新矩阵();
矩阵createGradientBox(w,h);
spr.graphics.beginGradientFill(渐变类型、线性、颜色、字母、比率、矩阵);
spr.graphics.drawRect(0,0,w,h);
spr.graphics.endFill();
rtspr.addChild(spr);
var spr2:Sprite=新Sprite();
rtspr.addChild(spr2);
var startA:Number=1;
对于(var i:int=0;startA>0;i++){
startA-=alphaStep;//orig 0.004!!!
spr2.图形.线条样式(1,过彩色,startA);
spr2.图形.移动到(0,h-i);
spr2.图形.线条图(w,h-i);
}
bmp.draw(rtspr,new Matrix());
图形填充(0,0);
graphics.drawRect(0,0,w,h);
graphics.endFill();
buttonMode=true;
addEventListener(MouseEvent.CLICK,onClick);
}
公共功能(百分比:整数):无效{
变量colorValue:int=int(255*百分比/100);
var currentGray:int=colorValue+colorValue