2009-10-24 45 views
1

我正在使用java.awt.Color實例。有沒有辦法對顏色進行算術運算?像rgb(20, 20, 20) + rgb(10, 200, 170) = rgb(30, 220, 190)Java:操作與顏色(加,減)? - 在不變的類中的顏色

我在做什麼:我有一個gui,它具有一個表格,如果用戶點擊一個單元格,其他單元格將根據它們與所選單元格的關係更改顏色。我正在尋找一種方法來避免硬編碼基礎顏色,以及它們改變哪些顏色值。

所以選定單元格可能是rgb(255, 0, 0),以及其他一切可能會根據它們的值是rgb(0, 0, 0)rgb(0, 255, 0)之間。我在想......枚舉?

import java.awt.Color; 

public enum ColorConstant { 
    SELECTED (new rgb(255, 0, 0), "Red"), 
    MAX_DISTANCE (new rgb(0, 255, 0), "Green") 

    private Color shade; 
    private ??? whichColorToModify; 

} 

回答

6

有一些方法Color.brighter和Color.darker。

除此之外,我平時寫這樣的目的一個小工具的方法,如:

private static Color brightness(Color c, double scale) { 
    int r = Math.min(255, (int) (c.getRed() * scale)); 
    int g = Math.min(255, (int) (c.getGreen() * scale)); 
    int b = Math.min(255, (int) (c.getBlue() * scale)); 
    return new Color(r,g,b); 
} 
+0

老兄!從來沒有想過使用Math.min,但它確實有道理! d: – Spoike 2009-10-24 17:11:09

+0

+1使用Math.min – William 2010-04-12 14:16:21

2

HSLColor可能是你在找什麼。它允許您輕鬆調整顏色的色調/陰影。

+0

'新HslColor(新HslColor(48.0,100.0,50.0).adjustHue(60.0))getSaturation()''返回100.0000002' 並在此之後的任何調整會引發錯誤非法參數飽和超出範圍。你能幫我嗎?? (new HslColor(48.0,100.0,50.0).adjustHue(180.0))。getSaturation()'returns 100.0000002 – Zasz 2011-09-17 13:53:50

+0

'new HslColor(48.0,100.0,50.0).adjustHue(60.0)'返回一個java。 awt.Color在紅色成分中具有1.00001> 1 :( – Zasz 2011-09-17 14:00:59