對漸變背景顏色使用漸變繪畫並不總是令人滿意,特別是在某些尺寸下。例如下面的代碼:如何製作更平滑的漸變背景顏色
public class TestPanel extends JPanel {
protected void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
int w = getWidth();
int h = getHeight();
Color color1 = Color.BLACK;
Color color2 = Color.GRAY;
GradientPaint gp = new GradientPaint(0, 0, color1, 0, h, color2);
g2d.setPaint(gp);
g2d.fillRect(0, 0, w, h);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame frame = new JFrame();
TestPanel panel = new TestPanel();
frame.add(panel);
frame.setSize(200,200);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
產生如下:
循環版本看起來比這還要糟糕:
我怎樣才能讓漸變外觀更平滑(在這兩種情況下)?
編輯:
看來,這是(至少部分)監測問題。我的筆記本電腦(1024 x 600,真彩色32位)上的漸變色看起來很糟糕,而我的臺式電腦(1280 x 1024,真彩色32位)看起來好多了。但即使使用臺式機的顯示器,結果仍然不那麼流暢。
兩者都使用Java版本6更新33
這是否意味着,當它與更高的分辨率觀看的應用程序應該只使用漸變背景?
編輯2:
不管怎麼說,對於那些面臨simlar問題,或者是在這個有興趣,我認爲,對於一個漸變的顏色看起來更平滑唯一的解決辦法就是更高的分辨率(假設顯示器已經設置到當然真正的顏色) - 這不是一個真正的解決方案。就像我在評論中所說的那樣,我認爲1024 x 600的分辨率對於簡單的黑色到灰色漸變色就足夠了,但似乎我錯了。當在具有支持更高分辨率的顯示器的計算機上運行相同的代碼時,漸變看起來更好,就像通過我的臺式機顯示器1280 x 1024一樣。不幸的是,我沒有更好的分辨率選項,但我相信它看起來更平滑。我還注意到,當我通過更好的顯示器觀看這些相同的圖像時,我上傳的兩張圖像(從我的上網本中獲取)看起來更平滑......所以它必須只是分辨率。
由於沒有解決方案,我認爲只有使用特定的梯度步驟才能看起來平滑的唯一方法(如黑到灰,即使在較低分辨率下看起來很糟糕),也應該有gui程序測試啓動時的分辨率,並選擇顯示適當的漸變,但我不確定是否值得。而使用較少的梯度步驟只是一個妥協。
由於缺乏更多/更好的迴應,我接受使用預先抖動的圖像作爲答案。
結果,當我運行你的代碼看起來相當不錯。雖然我看不到你的圖像。 –
你的意思是它取決於機器?如果是這樣你知道爲什麼? – Rempelos
等一下,你是什麼意思,你看不到我的形象?它沒有上傳(第一次我把圖像問題)? – Rempelos