首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >绘制点网格

绘制点网格
EN

Stack Overflow用户
提问于 2009-08-06 09:03:28
回答 2查看 2.3K关注 0票数 1

我是图形编程的新手。我正在尝试创建一个可以让你绘制有向图的程序。首先,我已经设法绘制了一组矩形(表示节点),并通过覆盖Java中的paint方法实现了平移和缩放功能。

在没有太多节点的情况下,这一切似乎都工作得相当好。我的问题是,当尝试绘制一个点网格时。一开始,我使用了一些简单的测试代码,使用两个嵌套的for循环覆盖了一个点网格:

代码语言:javascript
代码运行次数:0
运行
复制
int iPanX = (int) panX;
int iPanY = (int) panY;
int a = this.figure.getWidth() - iPanX;
int b = this.figure.getHeight() - (int) iPanY;

for (int i = -iPanX; i < a; i += 10) {
    for (int j = -iPanY; j < b; j += 10) {
        g.drawLine(i, j, i, j);
    }
}

这使我可以平移网格,但不能缩放。然而,平移时的表现很糟糕!我做了很多搜索,但我觉得我肯定遗漏了一些明显的东西,因为我找不到任何关于这个主题的东西。

任何帮助或指点都将不胜感激。

--斯蒂芬

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-08-06 09:43:45

使用BufferedImage作为点网格。初始化一次,然后只绘制图像,而不是一遍又一遍地绘制网格。

代码语言:javascript
代码运行次数:0
运行
复制
private init(){
    BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
    Graphics g = image.getGraphics();
    // then draw your grid into g
}

public void paint(Graphics g) {
    g.drawImage(image, 0, 0, null);
    // then draw the graphs
}

使用下面的代码可以轻松地实现缩放:

代码语言:javascript
代码运行次数:0
运行
复制
g.drawImage(image, 0, 0, null); // so you paint the grid at a 1:1 resolution
Graphics2D g2 = (Graphics2D) g;
g2.scale(zoom, zoom);
// then draw the rest into g2 instead of g

在缩放的图形中绘制将导致按比例增加线条宽度,等等。

票数 2
EN

Stack Overflow用户

发布于 2009-08-06 09:25:10

我认为每次鼠标移动时重新绘制所有的点都会给你带来性能问题。也许你应该考虑以位图的形式拍摄视图的快照并对其进行平移,当用户松开鼠标按键时“正确”地重新绘制视图?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1237759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档