【问题标题】:Way to draw to single pixel, in Jpanel在 Jpanel 中绘制到单个像素的方法
【发布时间】:2022-11-17 02:52:46
【问题描述】:

我目前正在使用 3d 引擎,但在编写自己的方法来绘制填充多边形时遇到了一个非常烦人的问题。我需要这个的原因是我必须确定任何给定的像素是否应该由于遮挡而逐个像素地绘制。我读过关于使用 Graphics.drawLine();使用相同的 xy 坐标来生成一个点并使用 1 x 1 甚至 0 x 0 的正方形来绘制像素但是这些对我来说都有问题,使用线法绘制,如下所示:

for (int x = min_x; x < max_x; x++) {
    for (int y = min_y; y < max_y; y++) {
        if (inp.contains(x, y)){
            g.drawLine(x, y, x, y);
                    
            }
        }
    }
}

使用强力方法产生一堆点而不是填充形状 image example of dots

另一个使用正方形会产生锯齿状的边缘:example of jagged shape 任何帮助是极大的赞赏。

【问题讨论】:

  • 您可以创建一个与您的JPanel 大小相同的BufferedImage。您可以为 BufferedImage 中的单个像素着色,或者您可以处理图像光栅。然后你会在JPanel上绘制BufferedImage。您可以直接在JPanel 上使用Graphics2D 方法,并设置抗锯齿。

标签: java swing jpanel


【解决方案1】:

你可以使用g.fillRect()代替g.drawLine()

for (int x = min_x; x < max_x; x++) {
    for (int y = min_y; y < max_y; y++) {
        if (inp.contains(x, y)){
            g.fillRect(x, y, 1, 1);     
            }
        }
    }
}

这将在坐标处填充一个大小为 1 像素的矩形,中间不会有任何白点。
笔记:不要使用g.drawRect(),因为它会产生与g.drawLine() 相同的白点!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-02
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 2012-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多