【问题标题】:saving bufferedimage to gif将缓冲图像保存为 gif
【发布时间】:2013-08-01 19:00:54
【问题描述】:

我有一个在 JPanel 上绘制图像的应用程序。我想完全处理 GUI,以便仅从代码调用应用程序,没有用户界面,并且仅将图像保存到 gif 文件中。

我已尝试使用来自 this question, 的代码,当我从旧 GUI 中调用保存 gif 代码时,它似乎工作正常。但是,当我删除 GUI 时,保存 gif 代码似乎不起作用,我想知道这是否可能是因为它试图打印的 JPanel 并没有真正进入像 JFrame 等 GUI 容器中。

我不发布代码的原因是它太冗长了,我只是要求一个简单的样板答案。

我已经为其他应用程序尝试过可写栅格。但这需要为这个应用程序进行一个主要的重新编码项目,该项目使用 graphics.drawLine() 方法进行绘制。谁能建议一种代码高效的方法来获取“幻像”JPanel 的内容,将其放入 BufferedImage,然后将其保存为 gif,而无需将 JPanel 放入 GUI 中?

【问题讨论】:

  • 你的应用程序没有使用从BufferedImage 获得的Graphics,你要保存在文件中吗?这不工作吗?
  • 一些代码会很好

标签: java graphics jpanel bufferedimage


【解决方案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"));

【讨论】:

    【解决方案2】:

    但是,如果没有任何示例代码,这很难回答。

    如果你尝试渲染的组件没有显示在屏幕上,很可能是没有布局。

    在绘制之前,您应该确定组件的大小。

    componentToBePainted.setSize(componentToBePainted.getPreferredSize());
    

    您还应该使用printprintAll 而不是paint。当未附加到本地对等体时,paint 可能会导致问题

    【讨论】:

    • 我在创建三个单独的列表时遇到了麻烦,每个列表在 spring hibernate 应用程序中都有相同对象类型的不同过滤器。你有一点时间帮我找出解决方案吗?问题出在这个链接:stackoverflow.com/questions/20292152/…
    猜你喜欢
    • 1970-01-01
    • 2013-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-08
    • 2017-05-06
    • 1970-01-01
    相关资源
    最近更新 更多