我当前正在制作绘画应用程序,目前正在实施橡胶工具。由于我使用的画布(jpanel)具有透明的背景(预期),所以我不能只调用g2d.filloval(x,x,y,x,y),因为它会绘制一个透明的圆圈,因此绘制了图纸以前留在那里。恰当地,我决定使用Writableraster,并且在两个循环中使用set像素方法,以塑造像素在一个圆圈中绘制的整体"形状"(在每个切线中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);
正如我之前所说的,代码打印了栅格,但不会在内部内部打印以进行块。我不知道我在做什么错。感谢您的帮助!
您是否验证了内部块的状况?
例如,如果x
总是大于或等于p1.x - bound
,x < bound
是否确实如此?如果p1.x > 2 * bound
,您的内部循环将永远不会被调用。