我有一个静态方法,应该加载一个条形图像,并在图像条形的每个瓦片上返回一个Bitmap[]。我使用了这样的方法,但在桌面java中使用了BufferedImages,结果很好,但在这里没有那么多。
方法如下:
public static Bitmap[] loadImageStrip(Resources res,int resid,int tilesize){
Bitmap temp1=BitmapFactory.decodeResource(res,resid);
System.out.println(temp1.getWidth());
System.out.println(temp1.getHeight());
Bitmap[] returnbitmap = new Bitmap[temp1.getWidth()/tilesize];
int iter=0;
int xtilepos=0;
while (iter<returnbitmap.length){
System.out.println(xtilepos);
returnbitmap[iter]=Bitmap.createBitmap(temp1,xtilepos,0,xtilepos+tilesize,tilesize);
iter++;
xtilepos+=tilesize;
}
return returnbitmap;
}
当我看到logcat,
System.out.println(temp1.getWidth());
打印3584,但就在例外之前,织物的宽度仅达到1792……可能是temp1宽度的一半。
在这种情况下,tilesize是128,returnbitmap.length是28,与我的图像条中的子图像数量相同。
一开始我没有想到的是,我使用的条形图是896x32,最初用于我的一款桌面Java游戏,但在android上,一切似乎都乘以4。
我不知道为什么我会得到一个非法争论异常:x+宽度必须是<=bitmap.width((当1792+128<3584
这是Strip图像太宽还是什么问题?我需要制作两行或三行条形图像吗?
您正在为创建Bitmap
传递x+width
,而不仅仅是宽度。
Bitmap.createBitmap((本身会将@param
width
添加到@paramx
。
这就是它在中点抛出IllegalArgumentException的原因。
只需更改
returnbitmap[iter]=Bitmap.createBitmap(temp1,xtilepos,0,xtilepos+tilesize,tilesize);
带有
returnbitmap[iter]=Bitmap.createBitmap(temp1,xtilepos,0,tilesize,tilesize);