【发布时间】:2017-02-16 11:46:08
【问题描述】:
我正在尝试使用 x 和 y 坐标绘制一些点并将输出保存到图像文件中,但我做不到。 (没有必要在 JFrame 上看到它们) 据我通过搜索了解到,我可以创建绘图并将其显示在 JFrame 上,但我无法将此输出保存到文件中。
public static void main(String[] args) {
try {
final JFrame frm = new JFrame("Points");
final Panel pnl = new Panel();
pnl.setPreferredSize(new Dimension(1000, 1000));
frm.setContentPane(pnl);
frm.pack();
frm.setVisible(true);
frm.repaint();
Image img;
img = frm.createImage(1000, 1000);
ImageIO.write((RenderedImage) img, "jpeg", new File("C:/.../p.jpeg"));
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
} catch (final Exception e) {
e.printStackTrace();
}
}
public static class Panel extends JPanel {
@Override
public void paintComponent(final Graphics g) {
g.setColor(Color.RED);
for (final Point p : CandidatePoints) {
g.fillRect((int) p.getX() * 10, (int) p.getY() * 10, 20, 20);
}}
此外,我尝试了使用 ImageIO 的 BufferedImage 的流行解决方案,但在这种情况下,我无法创建坐标系,而是在图像文件中得到了一个黑色矩形。
public static void main(String[] args) {
BufferedImage bimage = new BufferedImage(200, 200,
BufferedImage.TYPE_BYTE_INDEXED);
Graphics2D g2d = bimage.createGraphics();
g2d.setColor(Color.red);
for (final Point p : CandidatePoints) {
g2d.fillRect((int) p.getX() * 10, (int) p.getY() * 10, 20, 20);
ImageIO.write(bimage, "jpeg", new File("C:/.../p.jpeg"));
g2d.dispose();
}}
提前谢谢你
【问题讨论】:
-
如需尽快获得更好的帮助,请发帖minimal reproducible example 或Short, Self Contained, Correct Example。
-
您应该不将图像写入inside循环但在循环之后,即先填充图像然后写入并丢弃。
-
另外,
TYPE_BYTE_INDEXED不适用于 JPEG。 -
你也应该调用
paintComponent的超级方法
标签: java swing jpanel bufferedimage javax.imageio