2012-08-18 36 views
0

我有兩個圖形對象,是否可以將它們合併爲一個?在Java中合併兩個圖形對象

氣墊船充滿鰻魚的答案是有用的,但不是我的意思。假設我有兩個圖形對象,private Graphics gr1private Graphics gr2。現在,我應該如何將它們合併到paintComponent(Graphics)方法中以將它們繪製到我的(例如JPanel)?

問題不是關於圖像,而是關於僅僅是圖形對象。對不起,第一段是誤導。

編輯:
針對鰻魚的氣墊船全:

如果您在paintComponent()方法來繪製,我覺得,如果你重繪屏幕惱人的一切都過去了,如果你想移動的東西你必須保存一切的座標和尺寸,調整它們並在Graphics對象中得到它們。
我問自己的問題是accely:什麼對象最適合或保存圖形對象。一個圖形對象,我想。但問題是,如果你有(例如)兩個矩形,一個移動到左邊,一個移動到右邊,如果你有1個Graphics對象則不能。
我的解決方案是多個圖形對象,可以將其轉換爲模擬運動,然後繪製到屏幕上。
@Hovercraft充滿了鰻魚我想你(和大多數SO'ers)認爲這不是一個好的解決方案,看着你的答案。
但是,回答說You're doing it all wrong, you'd better stop programming根本沒有幫助我,所以請給我一個替代方案。

+0

結合如何?強加?綜合? – trashgod 2012-08-18 12:04:56

+0

哪一個和哪個第二? – 2012-08-18 12:08:38

+0

@trashgod你不應該問我,我真的不知道你在說什麼。首先,我的問題是如果甚至可能的話。但是,如果你的評論是一個答案,那麼你可以解釋哪些選項(參考/教程鏈接是理想的),我很有可能接受它。 – 11684 2012-08-18 12:21:27

回答

2
  • impose圖像,使用適當的佈局,如圖所示here

  • 若要compose圖像,請使用適當的複合規則,如here所示。

附錄:@HFOE是正確的。 GraphicsGraphics2D的實例,有時被稱爲圖形上下文,是應用呈現方法的暫時手段;目標設備或離屏圖像必須獨立存在。實現Shape接口的類是封裝有關什麼要在給定上下文中呈現的信息的好候選者。 AffineTestGraphPanel是例子。

+0

後者的相關示例可以在[此處]找到(http://stackoverflow.com/a/7824225/230513)。 – trashgod 2012-08-18 12:57:09

+0

編輯的問題 – 11684 2012-08-18 16:55:11

+0

再次編輯的問題 – 11684 2012-08-19 09:09:08

3

您可以通過獲取其Graphics上下文,繪製其中的任何圖像到BufferedImage中,然後處理Graphics對象。例如

// get a Graphics object from BufferedImage, img1 
Graphics g = img1.getGraphics(); 

// use that g to draw another BufferedImage starting at x, y of 0, 0 
g.drawImage(img2, 0, 0, null); 

// clean up resources so as not to run out. 
g.dispose(); 

現在img1顯示覆蓋它的img2的舊img1。如果你想圖像是透明的,你需要的字母組合讀了以及如何使用它

編輯
關於你編輯的問題:

我有兩個圖形對象,是否有可能將它們合併爲一個?
氣墊船充滿鰻魚的答案是有用的,但不是我的意思。假設我有兩個圖形對象,私有圖形gr1和私有圖形gr2。現在,我應該如何將它們合併到paintComponent(Graphics)方法中以將其繪製到我的(例如JPanel)?
問題不是關於圖像,而是關於純粹的圖形對象。對不起,第一段是誤導。

這個請求對我來說有些困惑,因爲我認爲Graphics對象是用來畫圖或屏幕的畫筆或畫筆。所以我不認爲你畫一個Graphics對象給任何東西,而是你使用一個Graphics對象作爲工具來繪製其他可以顯示或存儲圖形的東西。你將不得不花費更多的精力來問你的問題,向我們提供足夠的細節,以便我們不必猜測你正在嘗試做什麼。請告訴我們整個故事。

編輯2
在回答您最新的編輯你的問題:

如果在的paintComponent()方法來繪製,我覺得,如果你重繪屏幕惱人的一切都消失了,如果你想移動一些你必須保存的東西的座標和尺寸,調整它們並在Graphics對象中獲取它們。 我問自己的問題是accely:什麼對象最適合或保存一個Graphics對象。一個圖形對象,我想。但問題是,如果你有(例如)兩個矩形,一個移動到左邊,一個移動到右邊,如果你有1個Graphics對象則不能。

不,更好的解決方案我認爲是使用BufferedImage保存應該持續的。當您想要將圖像添加到背景BufferedImage時,您可以通過調用getGraphics()來獲得BufferedImage的Graphics對象,然後通過使用Graphics對象的drawImage(...)方法將圖像繪製到該對象上,然後您可以調用dispose()放在BufferedImage的Graphics對象上,以免丟失資源。

要在背景中繪製背景BufferedImage,您可以在paintComponent(...)方法的頂部調用它,通常在調用super.paintComponent(...)方法之後。

我的解決方案是多個圖形對象,它們可以轉換爲模擬運動,然後繪製到屏幕上。 @Hovercraft充滿了鰻魚我想你(和大多數SO'ers)認爲這不是一個好的解決方案,看着你的答案。

是的,你猜對了 - 我相信有比你建議的更好的解決方案。

在我對這個問題的回答中,我可以在我的代碼帖子中找到我正在得到的一個示例:changing-jpanel-graphics-g-color-drawing-line

如果你運行我的代碼,你會看到這一點:

enter image description here

+1

+1本示例組合使用默認的'AlphaComposite.SRC_OVER'規則。 – trashgod 2012-08-18 12:47:34

+0

是的,但是這是爲了在paintComponent方法中工作,例如保存我的繪圖,但是說我在兩個單獨的Graphics對象中有兩個繪圖,我如何合併它們? – 11684 2012-08-18 16:47:36

+0

編輯的問題。 – 11684 2012-08-18 16:53:19