1> 图像的种类(扩展名)是否有任何限制
加载?我试图加载一个 .bmp 文件,即使在我之后它也没有加载
将其重命名为 .jpg。但是,其他一些文件
已加载 .png 或 .jpg 等扩展名。
Image I/O 内置了对GIF, PNG, JPEG, BMP, and WBMP 的支持。图像 I/O 也是可扩展的,因此开发人员或管理员可以“插入”支持其他格式。例如,TIFF 和 JPEG 2000 的插件是单独提供的。
查看Reading/Loading an image 教程页面
2>有没有办法可以通过java剪切图像来创建一个新的
图片。说,我有一个 600x600 像素的图像,我想创建一个新的
通过从原件中间选择一个 200x200 像素的图像
图片。
两种方式。使用 Clipping with Graphics 裁剪图像。但更快的方法是使用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 展示了工作示例。