2013-11-28 53 views
0

我想寫一些程序,我加載圖像到面板。 這是我的5個問題:Java swing圖形圖像相關問題

1>是否有任何限制可以加載圖像的類型(擴展名)?我試圖加載一個.bmp文件,即使在使用.jpg重命名後,它也沒有加載。但是,其他一些帶有諸如.png或.jpg之類的擴展名的文件已加載。

2>有沒有一種方法可以通過java剪切圖像來創建新圖像。說,我有一個600x600像素的圖像,我想通過從原始圖片的中間選擇一個200x200像素來創建一個新的圖像。

3>有沒有一種方法可以調整圖像大小?

4>我可以將圖像添加到滾動窗格嗎?

5>我可以通過角度旋轉圖像,比如說30度嗎?

就是這樣。用例子稍作詳細說明會很好。提前致謝。

回答

2

1>是否對加載的圖像的種類(擴展名)有限制?我試圖加載一個.bmp文件,即使我使用.jpg將其重命名爲 ,它也沒有加載。但是,其他一些與 擴展名相關的文件(如.png或.jpg)已加載。

圖像I/O內置支持GIF, PNG, JPEG, BMP, and WBMP。圖像I/O也是可擴展的,以便開發人員或管理員可以「插入」對其他格式的支持。例如,TIFF和JPEG 2000的插件是單獨提供的。

檢查Reading/Loading an image教程頁面

2>有沒有一種方法,我可以通過Java削減圖像創建一個新的 圖像。比方說,我有一個600x600像素的圖片,我想通過從原始 圖片的中間選擇一個200x200像素來創建一個新的 圖像。

兩種方式。使用圖形剪輯裁剪圖像。但更快的方法是使用BufferedImage.getSubimage(int x, int y, int w, int h)方法。

BufferedImage image = ImageIO.read("image file"); 
    image = image.getSubimage(50, 50, 200, 200); 

這將裁剪在位置的圖像(x, y) == (50, 50)和大小200 x 200

3>有沒有一種方法,我可以調整圖像尺寸?

有關的討論各種方法將需要一個博客的大小。閱讀The Perils of Image.getScaledInstance()文章以獲得良好的洞察力。

然而,例如快速的方法:用cWidthcHeight

BufferedImage tmpImage = new BufferedImage(cWidth, cHeight, BufferedImage.TYPE_INT_ARGB); 
Graphics2D g2d = (Graphics2D)tmpImage.getGraphics(); 
g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, 
          RenderingHints.VALUE_INTERPOLATION_BILINEAR); 
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
g2d.drawImage(image, 0, 0, cWidth, cHeight, null); 

working example通過MadProgrammer完成。使用外部庫如this這更好,這很好地工作。

4>我可以將圖像添加到滾動窗格嗎?

不建議直接添加。改爲使用JLabel。或者使用自定義組件並覆蓋paintComponent(Graphics g)函數並在其中繪製。這兩種方法有一些工作的例子。通常與JLabel一起工作更容易。

See this question answers. Mine including @MadProgrammer.和自定義繪畫official tutorial頁面。

5>我可以通過角度旋轉圖像,比如30度嗎?

是使用Graphics2D.rotate(double theta)函數;實際上你可以用Graphics2D API做更多的事情。工作示例由MadProgrammer herehere顯示。

+0

哦,我得到了一個提醒,我猜我必須現在投票;) – MadProgrammer

+0

非常感謝賢者。那些會讓我一陣忙碌。最後一個問題:5>我可以旋轉一個角度,比如說30度嗎? – user3015246

+0

對於縮放,您可能希望閱讀[此示例](http://stackoverflow.com/questions/11959758/java-maintaining-aspect-ratio-of-jpanel-background-image/11959928#11959928)。您可能還想閱讀[Image.getScaledInstance()的危害](https://today.java.net/pub/a/today/2007/04/03/perils-of-image-getscaledinstance.html ) – MadProgrammer