为什么图像保存得如此之小?

时间:2013-01-11 09:21:07

标签: java bufferedimage graphics2d

这是我的代码。

    import java.awt.Color;
    import java.awt.Graphics2D;
    import java.awt.geom.Line2D;
    import java.awt.image.BufferedImage;
    import java.io.BufferedInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.util.ArrayList;
    import javax.imageio.ImageIO;

public class Test {

    public static void main(String args[]) throws IOException{

        int width = 400, height = 400;
        Test plot = new Test();

        BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

        Graphics2D g2d = bi.createGraphics();
        g2d.setPaint(Color.red);


        g2d.draw(new Line2D.Double(0,0,0,50));
        g2d.draw(new Line2D.Double(0,50,50,50));
        g2d.draw(new Line2D.Double(50,50,50,0));
        g2d.draw(new Line2D.Double(50,0,0,0));


        ImageIO.write(bi, "PNG", new File("d:\\sample.PNG"));
    }
}

enter image description here

您可以在上面看到输出图像。

现在,由于方块看起来非常小(我尝试改变宽度和高度),我需要以编程方式扩展它。 (因为我需要显示机器人行进的路径)。我该怎么做?请帮忙。

请注意,形状更重要,而不是尺寸。

1 个答案:

答案 0 :(得分:1)

我不知道我的问题是否正确,但是

    g2d.draw(new Line2D.Double(0,0,0,50));
    g2d.draw(new Line2D.Double(0,50,50,50));
    g2d.draw(new Line2D.Double(50,50,50,0));
    g2d.draw(new Line2D.Double(50,0,0,0));

给出一个50x50像素的矩形,因为您尚未定义任何变换。尝试像

这样的东西
    g2d.draw(new Line2D.Double(0,0,0,150));
    g2d.draw(new Line2D.Double(0,150,150,150));
    g2d.draw(new Line2D.Double(150,150,150,0));
    g2d.draw(new Line2D.Double(150,0,0,0));

,呈现更大的矩形。

或者,您也可以定义缩放转换,如

    g2d.scale(3.0, 3.0);

请注意,这也会缩放线宽,因此结果与在Line2D.Double()调用中使用不同坐标的结果不完全相同。

有关坐标系和Graphics2D渲染过程的更多信息,另请参阅http://docs.oracle.com/javase/7/docs/api/java/awt/Graphics2D.html