Java2d:翻译轴

时间:2010-05-14 00:56:28

标签: java graphics java-2d

我正在使用Java2d开发一个应用程序。我注意到的奇怪之处在于,原点位于左上角,正x向右,正y向下增加。

有没有办法将原点左下方移动?

谢谢。

5 个答案:

答案 0 :(得分:4)

您将需要进行缩放和翻译。

在您的paintComponent方法中,您可以执行此操作:

public void paintComponent(Graphics g)
{
    Graphics2D g2d = (Graphics2D) g;
    g2d.translate(0, -height);
    g2d.scale(1.0, -1.0);
    //draw your component with the new coordinates

    //you may want to reset the transforms at the end to prevent
    //other controls from making incorrect assumptions
    g2d.scale(1.0, -1.0);
    g2d.translate(0, height);
}

我的Swing有点生疏,但这应该可以完成任务。

答案 1 :(得分:2)

我们可以使用以下方法轻松解决问题,

public void paintComponent(Graphics g)
{
Graphics2D g2d = (Graphics2D) g;
// Flip the sign of the coordinate system
g2d.translate(0.0, getHeight());
g2d.scale(1.0, -1.0);
......
}

答案 2 :(得分:0)

您是否尝试过Graphics2D.translate()

答案 3 :(得分:0)

你会想要习惯它。就像卢克提到的那样,从技术上讲,你可以将变换应用于图形实例,但最终会对性能产生负面影响。

只需进行平移就可以将0,0的位置移动到左下角,但沿正轴的移动仍然在x方向上向右移动,在y方向向下移动,所以你要做的唯一事情就是绘制屏幕外的一切。你需要做一个旋转来完成你所要求的,这会将弧度计算的开销增加到图形实例的变换矩阵。这不是一个很好的权衡。

答案 4 :(得分:0)

仅供以后参考,我不得不在代码中交换对 int nr_elem; scanf("%d",&nr_elem); Dictionary *dict; dict = init_Dictionary(nr_elem); scale的调用顺序。也许这会对以后的人有所帮助:

translate

bottom left origin