2013-08-29 3 views
0

너비가 512px 인 이미지가 있습니다. 이 코드 조각은 내가 래스터 크기를 확인 할 때 당신은 너무 늦게 counterXcounterY를 업데이트하는 512getSubImage outside Raster

private void automaticStaticSpriteLoader(String loadedName, String imgLoc, BufferedImage[] biArray, int numberOfSpritesToLoad, int numberOfSpritesInImage, int percentComplete){ 
    try { 
     temporaryBigImg = ImageIO.read(getClass().getResource(imgLoc + ".png")); 
    } catch (IOException e) { 
     System.out.println(classNumber + " Error Loading Sprite Images. Shutting Down."); 
     e.printStackTrace(); 
    } 
    for(int i = 0; i<numberOfSpritesToLoad;i++){ 
     biArray[i] = temporaryBigImg.getSubimage(counterX, counterY, 32, 32); 
     System.out.println("CounterX = " + counterX + " CounterY = " + counterY + " Current Index = " + i); 
     if(counterX == 512){ 
      counterY += 32; 
      counterX = -32; 
     } 
     counterX+=32; 
    } 
} 

답변

1

을 말한다

RasterFormatException (x+width) is outside Raster 

내가 잘못하고 무엇 메신저 이해 해달라고 발생합니다.

당신은 counterX >= 512 있는지 확인하고 결국 counterY를 증가하고 getSubImage 전화 counterX 전에 다시 설정해야합니다.

게시물에있는 코드는 먼저 getSubImage(512, 0, 32, 32)을 호출 한 다음 counterX == 512 (테스트에 도달하지 않은 경우)인지 테스트합니다. 전달한 실제 값을 인쇄 해보면 잘못된 것을 알 수 있습니다.

+0

고맙습니다! 나는 그것이 512에 있다는 것을 깨닫지 못했다. (이미지의 끝이다.) – Loligans

+0

예외 메시지가 x와 width에 대한 실제 값을 포함하지 않는다고 생각한다. 디버깅이 훨씬 쉬울 것이다. .. – haraldK