我希望有一个基色,比如说0x0066FF,我希望之后的每次迭代都会变得稍暗一些。
答案 0 :(得分:3)
除了你的输入颜色有些灰色外,RGB不会削减它。 RGB对于存储像素数据很有用,但很难以“视觉上”有意义的方式进行操作。
前段时间我在flash编码器列表上写了一个关于这个主题的类似答案,所以接下来或多或少是一个逐字副本&粘贴那个答案。我希望你觉得它很有用。
更改基色阴影的准确方法是将RGB值透射到HSL color space,然后调整亮度(亮度),然后转换回RGB。 这是一个用于转换RGB< - >的方便类。 HLS。
http://www.dreaminginflash.com/2007/11/19/hls-to-rgb-rgb-to-hls/
这是一些测试代码:
import ColorUtils;
var rgb:Number = 0x336699;
var hls:Object = ColorUtils.RGBtoHLS(rgb);
var darkL:Number = Math.max(hls.l - 0.2,0);
var lightL:Number = Math.min(hls.l + 0.2,1);
var dark:Number = ColorUtils.HLStoRGB(hls.h,darkL,hls.s);
var light:Number = ColorUtils.HLStoRGB(hls.h,lightL,hls.s);
var origBmd:BitmapData = new BitmapData(40,40,false,rgb);
var darkerBmd:BitmapData = new BitmapData(40,40,false,dark);
var lighterBmd:BitmapData = new BitmapData(40,40,false,light);
var origBm:Bitmap = new Bitmap(origBmd);
var darkerBm:Bitmap = new Bitmap(darkerBmd);
var lighterBm:Bitmap = new Bitmap(lighterBmd);
darkerBm.y = 0;
origBm.y = 50;
lighterBm.y = 100;
addChild(origBm);
addChild(darkerBm);
addChild(lighterBm);
答案 1 :(得分:2)
0x000000是黑色的,所以更接近黑色的东西更暗(或者更灰,无论如何)。因此,如果你将每个字节之间的差异分开到它自己和0x00之间,那就快速变暗了。
0x00 / 2 = 0x00
0x66 / 2 = 0x33
0xff / 2 = 0x80
--> 0x0033ff
例如,如果你想要10个阴影,你可以将它拆分为10并迭代删除1/10。
更新
我刚刚写了这个:
/**
* Create new color blended into another.
* @param color to blend
* @param into other color
* @param factor amount of original color to keep, i.e. 0 would be no "color", all "into"
* @param blendAlpha uses the 0xFF000000 part of the color as well
* @returns blended color uint
*/
public static function blendColor( color:uint, into:uint=0xFFFFFFFF, factor:Number=0.5, blendAlpha:Boolean=false ) : uint
{
if( factor < 0 || factor > 1 ) factor = 0.5;
var a1:uint = ( color >> 24 ) & 0xFF;
var r1:uint = ( color >> 16 ) & 0xFF;
var g1:uint = ( color >> 8 ) & 0xFF;
var b1:uint = ( color >> 0 ) & 0xFF;
var a2:uint = ( into >> 24 ) & 0xFF;
var r2:uint = ( into >> 16 ) & 0xFF;
var g2:uint = ( into >> 8 ) & 0xFF;
var b2:uint = ( into >> 0 ) & 0xFF;
var a3:uint = ( a1*factor + a2*(1-factor) ) & 0xFF;
var r3:uint = ( r1*factor + r2*(1-factor) ) & 0xFF;
var g3:uint = ( g1*factor + g2*(1-factor) ) & 0xFF;
var b3:uint = ( b1*factor + b2*(1-factor) ) & 0xFF;
return ( blendAlpha?a3<<24:0x0 ) | (r3<<16) | (g3<<8) | b3;
}
答案 2 :(得分:1)
0x00 00 00是RED GREEN BLUE。含义0xFF0000为纯红色,0x00FF00为纯绿色,0x0000FF为纯蓝色。因此,如果您想变暗,请从0xFF开始降低十六进制值。如果您想要将暗度从0x0066FF缩放,您需要确保保持相同的RGB比率。含义0xFF00FF - &gt; 0xCC00CC - &gt; 0x990099 - &gt; 0x660066 - &gt; 0x330033 - &gt; 0×000000。
原谅部分答案,但希望这足以让您自己找出更具体的实施细节。