【问题标题】:Raster stops process with-out error光栅停止过程没有错误
【发布时间】:2014-02-07 10:06:14
【问题描述】:

我目前正在制作一个绘画应用程序,并且正在实施橡皮工具。由于我使用的画布(JPanel)具有透明背景(预期),我不能只调用 g2d.fillOval(x,y,x,y) 因为它会绘制一个透明的圆圈,因此绘图以前在那里会留下来。因此,我决定在两个循环中使用 WritableRaster 和 setPixel 方法来塑造像素绘制成圆形的整体“形状”(每个切线上的 r 都相同)。然而,我在调用 setPixel 方法时遇到了问题,因为它不绘制任何东西。我什至将颜色设置为黑色只是为了测试它,什么都没有。我一直在篡改它并插入打印语句并将其缩小到最内部的 for 块中,因为打印方法不会输出到控制台。

这是我的代码

WritableRaster raster = (WritableRaster) bi.getData();
Integer[] arrayw = al.get(i);

Point p1 = new Point(arrayw[0], arrayw[1]);
Point p2 = new Point(arrayw[2], arrayw[3]);
int[] black = new int[]{0, 0, 0};
int r = tl.get(i);

for (int y = p1.y - r; y < r; y++) {
    int bound = (int) (Math.sqrt(r * r - y * y) + 0.5);
    for (int x = p1.x - bound; x < bound; x++) {
        raster.setPixel(x, y, black);
        gc.drawLine(x, y, x, y);
        System.out.println(y + "\t" + x + "\t" + tl.get(i));

    }
}
for (int y = p2.y - r; y < r; y++) {
    int bound = (int) (Math.sqrt(r * r - y * y) + 0.5);
    System.out.print("test");

    for (int x = p2.x - bound; x < bound; x++) {
        raster.setPixel(x, y, black);
        gc.drawLine(x, y, x, y);
        System.out.println(y + "\t" + x + "\t" + tl.get(i));
    }
}


System.out.print("raster");
bi.setData(raster);

正如我之前所说,代码会打印光栅,但不会在内部 for 块内打印。我不知道我做错了什么。感谢您的帮助!

【问题讨论】:

  • 您是否验证过内部块的条件是否满足?例如,如果x 总是大于或等于p1.x - bound,那么x &lt; bound 是真的吗?如果p1.x &gt; 2 * bound,你的内部循环将永远不会被调用。
  • @NathanielJones 谢谢,你是对的。我得到了它的工作。

标签: java for-loop graphics raster


【解决方案1】:

您是否验证过内部块的条件是否满足?

例如,如果x 总是大于或等于p1.x - bound,那么x &lt; bound 是否真的存在?如果p1.x &gt; 2 * bound,你的内部循环将永远不会被调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 1970-01-01
    • 2020-01-23
    • 2019-06-03
    • 2015-02-21
    • 1970-01-01
    相关资源
    最近更新 更多