2013-08-29 79 views
0

我有一個寬度爲512px的圖像。這段代碼會拋出getSubImage外部光柵

RasterFormatException (x+width) is outside Raster 

我不明白什麼即時做錯了,當我檢查柵格尺寸它說,它512

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

要更新counterXcounterY爲時已晚。

你必須檢查是否counterX >= 512,並最終增加counterY和重置你叫getSubImagecounterX之前。

代碼,如在您的文章中將首先呼叫getSubImage(512, 0, 32, 32),然後測試是否counterX == 512(但測試從未達到)。嘗試打印您傳入的實際值,然後您會看到錯誤。

+0

謝謝!我沒有意識到它是在512(這是圖像的末尾) – Loligans

+0

我認爲這非常煩人,在這種情況下異常消息不包含x和寬度的實際值,它將更容易調試.. – haraldK