Так что я надеюсь, что кто-нибудь сможет помочь мне с этим.Я пишу игру «Головоломка» для своего класса «Компьютерная графика», и я наткнулся на небольшую загадку, пытаясь разрезать мое изображение на части.Я считаю, что проблема заключается в 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;
}