Разрезание изображения IllegalArgumentException для createWritableChild - PullRequest
2 голосов
/ 21 февраля 2011

Так что я надеюсь, что кто-нибудь сможет помочь мне с этим.Я пишу игру «Головоломка» для своего класса «Компьютерная графика», и я наткнулся на небольшую загадку, пытаясь разрезать мое изображение на части.Я считаю, что проблема заключается в createWritableChild, но на самом деле это сообщение об ошибке не совсем ясно, поэтому я не уверен.Это моя ошибка:

Исключение в потоке "AWT-EventQueue-0" java.lang.IllegalArgumentException: Raster ByteInterleavedRaster: ширина = 45 высота = 45 #numDataElements 3 dataOff [0] = 137 имеет minX или minY нетравно нулю: 45 0 в java.awt.image.BufferedImage. (Неизвестный источник) в JigsawPuzzle.runPuzzleCreate (JigsawPuzzle.java:106) в JigsawPuzzle.gameBoardCreate (JigsawPuzzle.java:137) в JigsawPawzzleP.jp.: 65)

Вот мой код, который выдает ошибку:

//Cuts up the given Image and creates the Puzzle and its Pieces.
public Puzzle runPuzzleCreate(BufferedImage p){
    int pieceCount = 150;
    int pieceSize = 45;
    Piece[] pieces = new Piece[pieceCount];
    Piece[] scaled = new Piece[pieceCount];
    Puzzle puzzle = new Puzzle(p, pieces, scaled);
    ColorModel cm = p.getColorModel();
    boolean premult = cm.isAlphaPremultiplied();
    WritableRaster raster = p.copyData(null);
    Posn pos = new Posn(0, 0);
    for(int i = 0; i < pieceCount; i++){
        if(pos.xPos <= 555){
            WritableRaster childRaster = 
                raster.createWritableChild(pos.xPos, pos.yPos,
                        pieceSize, pieceSize,
                        pos.xPos, pos.yPos,
                        null);
            BufferedImage pieceImage = new BufferedImage(cm, childRaster,
                    premult, null);
            Piece piece = new Piece(pieceImage, pos);
            pieces[i] = piece;
            scaled[i] = piece;
            pos.xPos += pieceSize;
        } else if (pos.yPos <= 450){
            pos.yPos += pieceSize;
            pos.xPos = 0;
        } else {
            break;
        }
    }
    return puzzle;
}

1 Ответ

2 голосов
/ 21 февраля 2011

Жаль, что это исключение не задокументировано, но, глядя на его сообщение и исходный код BufferedImage, кажется, что вам нужно передать 0 для 5-го или шестого аргумента (или обоих) вызова метода raster.createWritableChild().

...