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()
文章以獲得良好的洞察力。
然而,例如快速的方法:用cWidth
和cHeight
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 here和here顯示。
哦,我得到了一個提醒,我猜我必須現在投票;) – MadProgrammer
非常感謝賢者。那些會讓我一陣忙碌。最後一個問題:5>我可以旋轉一個角度,比如說30度嗎? – user3015246
對於縮放,您可能希望閱讀[此示例](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