내 할당은 지정된 (x, y) 좌표에서 시작하여 닫힌 모양의 색상을 지정하고 모양의 테두리에 도달 할 때까지 재귀 호출을 통해 "확산"알고리즘을 구현하는 것입니다 . 내가 가지고 올 한 것을 지금까지이 :닫힌 모양을 채색하는 특정 알고리즘을 사용하는 StackOverflowError
private void color(int x, int y) {
g2d.draw(new Line2D.Double(x, y, x, y));
if (!robot.getPixelColor(x - 1, y).equals(Color.BLACK) &&
!robot.getPixelColor(x - 1, y).equals(Color.RED)) {
color(x - 1, y);
} else if (!robot.getPixelColor(x + 1, y).equals(Color.BLACK) &&
!robot.getPixelColor(x - 1, y).equals(Color.RED)) {
color(x + 1, y);
} else if (!robot.getPixelColor(x, y - 1).equals(Color.BLACK) &&
!robot.getPixelColor(x - 1, y).equals(Color.RED)) {
color(x, y - 1);
} else if (!robot.getPixelColor(x, y + 1).equals(Color.BLACK) &&
!robot.getPixelColor(x - 1, y).equals(Color.RED)) {
color(x, y + 1);
}
}
로봇 클래스 'getPixelColor 내가 또 다른 getRGB를 것 알고까지 (주어진 픽셀의 색상을 얻을 수있는 유일한 방법입니다 만, 이미지 개체에서만 작동합니다). 모양의 바깥 라인이 확실히 검은 색으로 나의 이해에이 작동해야하고, 초기 x와 y 값은의 MouseListener에서 온, 그래서 그들은, 모양 내부에있는 그러나 나는 다음과 같은 오류 얻을 :
Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
at sun.java2d.pipe.BufferedContext.validateContext(BufferedContext.java:110)
at sun.java2d.d3d.D3DRenderer.validateContextAA(D3DRenderer.java:42)
at sun.java2d.pipe.BufferedRenderPipe$AAParallelogramPipe.fillParallelogram(BufferedRenderPipe.java:445)
at sun.java2d.pipe.PixelToParallelogramConverter.drawGeneralLine(PixelToParallelogramConverter.java:264)
at sun.java2d.pipe.PixelToParallelogramConverter.draw(PixelToParallelogramConverter.java:121)
at sun.java2d.SunGraphics2D.draw(SunGraphics2D.java:2336)
at dline.DrawingSpace.color(DrawingSpace.java:87)
at dline.DrawingSpace.color(DrawingSpace.java:93)
at dline.DrawingSpace.color(DrawingSpace.java:90)
at dline.DrawingSpace.color(DrawingSpace.java:93)
at dline.DrawingSpace.color(DrawingSpace.java:90)
을
(drawingSpace는 JPanel의 하위 클래스입니다.)
선생님은 메모리를 많이 사용한다고 말했지만, 작동하는 알고리즘으로되어있어 분명히 잘못되었습니다. 어떤 도움이 많이 appriciated 것입니다, 감사합니다.
이 좋은 지점입니다. 또한 로봇은 화면 좌표에서 작동하지만 drawLine은 구성 요소 좌표에서 작동합니다 (추가 AffineTransform을 사용하지 않는 경우). –