2012-10-09 68 views
3

我想弄清楚如何拍攝圖像並使用Graphics2D來操縱它,同時能夠在同一圖像上執行多個操作(使它變暗兩次會使它變暗比做一次)。我發現的每一個例子都是爲了操作一次圖像並顯示它。我需要能夠多次顯示圖像。例如,假設我有一個包含選項1,2,3等的菜單,其中1個變暗,2個變亮,3個顯示圖像。使用Graphics2D操縱圖像多次

我該怎麼做到這一點?我可以得到圖像,使其變暗,旋轉並顯示它,但不能用菜單或用戶選擇何種方式的其他方式。如果有人可以將我鏈接到一個可以做到這一點的網頁,或者寫一個簡短的(更短的更好的),一個課程程序來做我所描述的,我應該能夠開始。

基本上,我需要能夠做這樣的事情:

initialize image; 
display(image); 
lighten(image); 

我不明白,是我如何處理與Graphics2D的圖像,並將其應用到我的形象。

這是我迄今(主要來自here):

import java.awt.*; 
import javax.swing.*; 

@SuppressWarnings("serial") 
public class ShowImage extends JPanel { 
Image img; 

     public ShowImage() { 
      super(); 
      img = Toolkit.getDefaultToolkit().getImage("image.png"); 
     } 

     public void paintComponent(Graphics g) { 
      Graphics2D g2d = (Graphics2D) g; 
      g2d.translate(170, 0); 
      g2d.rotate(1); 
      g2d.drawImage(img, 0, 0, this); 
     } 

     public static void main(String arg[]) { 
      JFrame frame = new JFrame("Image Example"); 
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      frame.setSize(600, 400); 

      ShowImage panel = new ShowImage(); 
      frame.setContentPane(panel); 
      frame.setVisible(true); 
    } 
} 

目前,我在做的paintComponent(所有的操作),所以它不是在所有容易被操縱。有沒有辦法讓main設置的Graphics2D變量,然後以某種方式將它變成paintComponent()?我完全失去了如何去做這件事。

我試圖發佈鏈接到我查看的所有網頁,但它不會讓我發佈兩個以上的鏈接,因爲我是新手。

回答

1

如果您需要處理內存中的圖像,請創建一個BufferedImage,然後調用BufferedImage.createGraphics()以訪問用於繪製到圖像緩衝區中的圖形對象。

當您想要將該圖像渲染到UI中的某個組件上時,請像完成一樣使用該組件的paintComponent()方法。請注意,這涉及兩個獨立的圖形對象,用於兩個不同的目的。

+0

因此,我試圖通過編寫[this](http://pastebin.com/LutTz0p4)來做你所說的,但是,我沒有得到要顯示的圖像,只是一個空白的應用程序。 – Nathan

+0

小心不要混淆圖像和緩衝區。在paintComponent()中,使用g.drawImage(),而不是g2d.drawImage()。也是主方法的最後一行,您正在將圖像繪製到屬於同一圖像的緩衝區,這可能會導致問題。爲渲染創建一個單獨的圖像緩衝區(不要使用與源圖像相同的圖像對象)。 – JimN

+0

好吧,所以我在paintComponent()中有g.drawImage(),但我仍然不確定如何繪製旋轉的圖像。在改變paintComponent()並刪除我的main中的最後一行後,它只繪製常規圖像而不是旋轉圖像。 – Nathan