2015-09-06 72 views
0

我正在開發一個輕量級圖形API,以滿足不同需求,我希望在顯示圖像之前呈現圖像。我已經覆蓋了AWT的組件以獲得最高的性能。但是,如果我在paint方法中渲染圖像(畫線,矩形&東西),則在用戶頻繁調用方法時(例如正在調整窗口大小或正在播放動畫),用戶可以看到繪製過程, ,這是一個相當重要的性能解決方案。在Java AWT中繪製單個像素的最快方法圖形

我決定緩存和分離渲染圖像,並簡單地將像素複製到paint方法中的圖形對象。但是現在我不知道如何繪製一個像素到Graphics對象。我想下層的Sun實現有這樣的方法,但我不應該講這個類。我知道Graphics類聲明瞭幾個看起來很輕量級的方法(drawLine,drawRect,fillRect等),可以用來繪製一個像素,但我不知道哪一個最快。

由於存在內存問題,我不想使用BufferedImage,因此drawImage在這種情況下不是解決方案。在this question中也不是這樣,因爲我再也沒有使用圖像,並且也沒有在paint方法中創建新實例(渲染圖像數據類僅在組件大小調整時纔會更改)。

tl; dr:java.awt.Graphics中用於將某個像素的顏色通過其座標設置爲指定顏色(java.awt.Color或RGB,最後優選)的最快方法。

預先感謝您。

回答

0

如果你覺得你需要調用repaint()並且有一個paintComponent(Graphics g)立即停止。玩這個,我今天早上做了。 包寵物;

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Graphics; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 
import java.io.IOException; 
import javax.swing.*; 


public class pet extends JPanel implements MouseListener{ 
public static JFrame frame = new JFrame("frame"); 
public pet() throws IOException{ 
setPreferredSize(new Dimension(870, 675));   //configuring panel 
addMouseListener(this); 
} 
public static void main(String[] args) throws IOException{ 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    JComponent newContentPane = new pet(); 
    newContentPane.setOpaque(true); 
    frame.setContentPane(newContentPane); 
    frame.pack(); 
    frame.setVisible(true); 
    frame.addMouseListener(new pet()); 
} 
public void paintRectangleAtPoint(Graphics g, int x, int y){ 
g.setColor(Color.BLACK); 
g.drawRect(x, y, 100,100); 
} 
public void paintStuff(Graphics g, int x, int y){ 
g.setColor(Color.BLACK); 
g.drawRect(x, y, 100,100); 
} 
@Override 
public void mouseClicked(MouseEvent e) { 
paintStuff(frame.getGraphics(),e.getX(), e.getY()); 
} 
@Override 
public void mousePressed(MouseEvent e) { 
// TODO Auto-generated method stub 
} 
@Override 
public void mouseReleased(MouseEvent e) { 
// TODO Auto-generated method stub 
} 
@Override 
public void mouseEntered(MouseEvent e) { 
// TODO Auto-generated method stub 
} 
@Override 
public void mouseExited(MouseEvent e) { 
// TODO Auto-generated method stub 
} 
} 

玩這個周圍,這是很簡單的,告訴我,如果你想要一些評論中無論你怎麼稱呼你的畫法

+0

,你可以在X通,y座標,然後做g.drawRect(XCOORD ,YCOORD,1,1); –

相關問題