【问题标题】:Java swing graphics image related questionsJava swing图形图像相关问题
【发布时间】:2013-12-14 23:30:12
【问题描述】:

我正在尝试编写一些将图像加载到面板的程序。 这是我的 5 个问题:

1> 可以加载哪种(扩展名)图像有什么限制吗?我试图加载一个 .bmp 文件,即使我用 .jpg 重命名它也没有加载。但是,加载了其他一些扩展名为 .png 或 .jpg 的文件。

2>有没有办法可以通过java剪切图像以创建新图像。比如说,我有一个 600x600 像素的图像,我想通过从原始图片中间选择一个 200x200 像素来创建一个新图像。

3>有没有办法调整图片大小?

4>我可以将图像添加到滚动窗格吗?

5> 我可以将图像旋转一个角度,比如 30 度吗?

就是这样。稍微详细说明一下例子会很好。提前致谢。

【问题讨论】:

    标签: java image swing graphics awt


    【解决方案1】:

    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() 文章以获得良好的洞察力。

    但是,一个快速的方法,例如: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 展示了工作示例。

    【讨论】:

    • 非常感谢圣人。这些会让我忙一阵子。最后一个问题:5> 我可以将图像旋转一个角度,比如 30 度吗?
    • 对于缩放,您可能想通读this example。您可能还想阅读The Perils of Image.getScaledInstance()
    • 图像旋转example, example
    • @MadProgrammar :谢谢,我会检查一下。最后一件事 。 Sage说.bmp是java支持的,那为什么不加载而.png同样的代码呢?
    • 我没有使用 BuffereImage,顺便说一句。我正在使用 ImageIcon。这可能是原因吗?缓冲图像、图像和图像图标有什么区别?这一切都太混乱了!
    猜你喜欢
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    • 2012-01-25
    • 2013-08-06
    • 1970-01-01
    相关资源
    最近更新 更多