光栅停止处理没有错误

时间:2014-02-05 20:28:54

标签: java for-loop graphics raster

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

这是我的代码

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 block中打印。我不知道我做错了什么。谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

您是否已确认是否符合内部区块的条件?

例如,x < bound如果x总是大于或等于p1.x - bound,那么它是真的吗?如果p1.x > 2 * bound,你的内部循环永远不会被调用。