getSubimage дает мне ожидание ноль - PullRequest
0 голосов
/ 08 февраля 2020

Я пытаюсь сделать игру в шахматы с java, и я получил изображение от Google для кусков. Теперь я хочу сократить его до 6 * 2 изображений (черно-белые). Но я не могу понять, что не так с этим.

    public static final String PIECES_IMAGE_PATH = "Images/chess_pieces.png";
    public static final int PIECE_IMAGES_INROW = 6;
    public static final int PIECE_IMAGE_ROWS = 2;

BufferedImage[][] pieceIcons;

    private void setupPieceImages(){
        try {
            BufferedImage image = ImageIO.read(new File(Config.PIECES_IMAGE_PATH));

            int pieceImageWidth = image.getWidth()/Config.PIECE_IMAGES_INROW;
            int pieceImageHeight = image.getHeight()/Config.PIECE_IMAGE_ROWS;
            for(int x = 0; x < pieceImageHeight; x++){
                for(int y = 0; y < pieceImageWidth; y++){
                    try{
                        pieceIcons[x][y] = image.getSubimage(x*pieceImageHeight,y*pieceImageWidth,pieceImageWidth,pieceImageHeight);
                    }catch(Exception e){
                        System.out.println("Error1: "+e.getMessage());
                    }
                }
            }
        }catch(Exception e){
            System.out.println("error2: "+e.getMessage());
        }
    }

Любая идея, почему я продолжаю получать ошибку Expection1: null

1 Ответ

1 голос
/ 08 февраля 2020

Я не уверен, почему вы должны выполнять итерацию по ширине / высоте, но я предполагаю, что вы хотите выполнить итерацию по 2 строкам по 6 столбцов в каждом (или 6 столбцам по 2 строки в этом случае):

public static final String PIECES_IMAGE_PATH = "Images/chess_pieces.png";
public static final int PIECE_IMAGES_INROW = 6;
public static final int PIECE_IMAGE_ROWS = 2;


public static void main(String args[]) {
    BufferedImage[][] pieceIcons = new BufferedImage[PIECE_IMAGES_INROW][PIECE_IMAGE_ROWS];

    try {
        BufferedImage image = ImageIO.read(new File(Try.class.getResource(PIECES_IMAGE_PATH).toURI()));

        int pieceImageWidth = image.getWidth()/PIECE_IMAGES_INROW;
        int pieceImageHeight = image.getHeight()/PIECE_IMAGE_ROWS;
        for(int x = 0; x < PIECE_IMAGES_INROW; x++){
            for(int y = 0; y < PIECE_IMAGE_ROWS; y++){
                try{
                    pieceIcons[x][y] = image.getSubimage(x*pieceImageWidth,y*pieceImageHeight,pieceImageWidth,pieceImageHeight);
                }catch(Exception e){
                    System.out.println("Error1: "+e.getMessage());
                }
            }
        }
    }catch(Exception e){
        System.out.println("error2: "+e.getMessage());
    }
}

Ошибка, которую вы получаете, похоже, связана с Error1, и это может быть indexOutOfBoundsException в случае, если вы инициализировали pieceIcons с неожиданным максимальным значением x / y во время выполнения.

...