2013-08-01 46 views
0

我有一個在JPanel上繪製圖像的應用程序。我想完全棄用GUI,以便僅從代碼調用應用程序,而無需用戶界面,並且僅將圖像保存爲gif文件。將bufferedimage保存爲gif

我從this question,嘗試用代碼,似乎當我從老GUI中調用保存GIF代碼做工精細。然而,保存GIF代碼不似乎當我刪除GUI工作,而且,我想知道這可能是因爲它正試圖打印JPanel中其實並沒有使它像一個JFrame的GUI容器等

我沒有發佈代碼的原因是它太冗長了,我只是要求一個簡單的樣板答案。

我已經嘗試了writeablerasters用於其他應用程序。但是,這需要一個重要的應用程序重新編碼項目,通過使用graphics.drawLine()方法進行繪製。任何人都可以提出一種代碼高效的方法來獲取「幻像」JPanel的內容,將其放入BufferedImage中,然後將其保存爲gif,而無需將JPanel放入GUI中?

+1

WHU沒有您的應用程序借鑑了'Graphics'從'BufferedImage'您要保存文件上獲得的?這不正常嗎? –

+0

一些代碼會很好 – MadProgrammer

回答

1

由於您的應用程序借鑑了JPanel那麼它只是需要一個Graphics對象。您可以使用BufferedImage中的一個,然後將其保存到文件。示例代碼:

BufferedImage image = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB); 

Graphics g = image.getGraphics(); 

// Pass this graphics object to your application to perform the drawing   
g.setColor(Color.red); 
g.drawRoundRect(10, 10, 20, 20, 5, 5); 

// save it to disk 
ImageIO.write(image, "png", new File("test.png")); 
0

但是,如果沒有任何示例代碼,這很難回答。

如果你想呈現組件不顯示在屏幕上,很可能還沒有被解僱了。

在繪畫之前,您應該確保您調整組件大小。

componentToBePainted.setSize(componentToBePainted.getPreferredSize()); 

你也應該使用printprintAll超過paint。當沒有連接到本地對等體,paint會導致問題

+0

我在創建三個單獨的列表時遇到了麻煩,每個列表在春季休眠應用程序中都有相同對象類型的不同過濾器。你有一點時間來幫助我找出解決方案嗎?問題是在這個鏈接:http://stackoverflow.com/questions/20292152/parameterizing-object-properties – CodeMed