我已经编写了这段代码来将图像分成9个部分,它给了我运行时错误。 LogCat没有错误,我被卡住了。错误来自底部的第7行(Bitmap.createBitmap(...);)。
public Bitmap[] getPieces(Bitmap bmp) {
Bitmap[] bmps = new Bitmap[9];
int width = bmp.getWidth();
int height = bmp.getHeight();
int rows = 3;
int cols = 3;
int cellHeight = height / rows;
int cellWidth = width / cols;
int piece = 0;
for (int x = 0; x <= width; x += cellWidth) {
for (int y = 0; y <= height; y += cellHeight) {
Bitmap b = Bitmap.createBitmap(bmp, x, y, cellWidth,
cellHeight, null, false);
bmps[piece] = b;
piece++;
}
}
return bmps;
}
答案 0 :(得分:4)
这是android框架的限制,它没有给出正确的错误信息。理想的解决方案是将代码包装在try / catch块中,并将异常记录到控制台并相应地修复代码,但仅将其用于调试目的。
try {
// Code
}
catch (Exception e) {
Log.e("ERROR", "ERROR IN CODE:"+e.toString());
}
以上代码摘自:
答案 1 :(得分:2)
而不是
for (int x = 0; x <= width; x += cellWidth) {
for (int y = 0; y <= height; y += cellHeight) {
使用
for (int x = 0; x+cellWidth < width; x += cellWidth) {
for (int y = 0; y+cellHeight < height; y += cellHeight) {
以避免获取(至少部分地)不存在的图像部分。
答案 2 :(得分:0)
在你的代码中,piece可以大于8,所以你得到的索引超出了bmps。你需要重写它,以便最右边和最底部的部分只具有所有额外的,并且不一定是相同的大小。
或者,如果您需要它们的大小相同,请删除额外的行/列。为了确保,我会像这样制定我的for循环
for (int cellX = 0; cellX < 3; cellX++) {
int x = cellX * cellWidth;
for (int cellY = 0; cellY < 3; cellY++) {
int y = cellY * cellHeight;
// find the cellWidth/Height that doesn't overflow the original image
Bitmap b = // get the bitmap
bmps[piece] = b;
piece++;
}
}