我想要有一個基本的顏色,比如說0x0066FF,我想每次迭代之後都會稍微變暗一些。如何以編程方式更改十六進制顏色以變得更亮或更暗?
回答
0x000000是黑色的,所以接近黑色的任何東西都會變暗(反正更灰)。所以,如果你將自己和0x00之間的每個字節的差異分開,它會很快變暗。例如,如果你想要10個陰影,你可以將它拆分爲10,然後迭代去除10分之1。
更新:
我前一段時間寫了這個:
/**
* 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;
}
0×00 00 00紅綠藍。含義0xFF0000爲純紅色,0x00FF00爲純綠色,0x0000FF爲純藍色。所以如果你想變暗,從0xFF開始降低十六進制值。如果您想要從0x0066FF縮放黑暗,您需要確保保持RGB的相同比例。含義0xFF00FF - > 0xCC00CC - > 0x990099 - > 0x660066 - > 0x330033 - > 0x000000。
原諒部分答案,但希望這足以讓您自行找出更具體的實施細節。
基本顏色是動態的,是否有一個我可以使用的普遍方程? – daidai 2010-07-13 00:41:58
除了你的輸入顏色是灰色陰影,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. 以編程方式更改colorControlActivated顏色
- 3. 改善黑暗/亮度算法Javascript十六進制顏色
- 4. android如何以編程方式更改進度欄顏色
- 5. 如何以編程方式更改imageView的色調顏色?
- 6. 以編程方式更新顏色
- 7. 以編程方式更改水平進度條的顏色
- 8. 如何以編程方式更改AvalonEditor中的默認顏色以獲得c#
- 9. 如何使用十六進制更改顏色,使用單線更平滑
- 10. 如何以編程方式更改TabLayout標題顏色?
- 11. 如何更改android中的SeekBar顏色? (以編程方式)
- 12. 如何以編程方式在圓上動態更改顏色
- 13. 如何以編程方式更改colors.xml中的顏色值?
- 14. 如何以編程方式更改按鈕的背景顏色
- 15. 如何以編程方式更改圖像中的顏色?
- 16. 如何以編程方式更改文本的顏色?
- 17. 如何以編程方式更改Highcharts中的顏色選項?
- 18. 如何以編程方式更改ActionBar menuitem文本顏色?
- 19. 如何以編程方式更改Tkinter標籤的顏色?
- 20. 如何以編程方式更改對話框背景顏色?
- 21. 如何以編程方式更改ngTable標題顏色?
- 22. 以編程方式訪問MenuItem以更改文本顏色
- 23. 以編程方式更改膚色
- 24. 改變背景顏色以十六進制
- 25. 十六進制編輯dll以更改依賴項名稱?
- 26. 如何使用十六進制格式更改容器的背景顏色?
- 27. 以編程方式更改GridView控件的行顏色格式
- 28. 以十六進制或十進制格式打印變量
- 29. 哪一個更快:十六進制顏色代碼或顏色名稱?
- 30. 以編程方式更改ImageResource(繪製)
sortof重複,這裏很多相關答案:http://stackoverflow.com/questions/2258800/how-can-i-calculate-shades -of-a-given-hex-color-in-actionscript-3 – 2010-07-13 00:51:13