0
我目前正在製作繪畫應用程序,目前正在實施橡膠工具。由於我使用的canvas(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);
正如我前面所說的,代碼打印光柵,但內內不打印塊。我不知道我做錯了什麼。感謝您的幫助!
您是否驗證過內部塊的條件是否滿足?例如,如果'x'總是大於或等於'p1.x - bound',那麼是否有'x 2 * bound',你的內部循環永遠不會被調用。 –
@NathanielJones謝謝你,你是對的。我得到了它的工作。 – gedr