Java Android Bitmap.createBitmap过早超过src位图宽度



我有一个静态方法,应该加载一个条形图像,并在图像条形的每个瓦片上返回一个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((本身会将@paramwidth添加到@paramx

这就是它在中点抛出IllegalArgumentException的原因。

只需更改

returnbitmap[iter]=Bitmap.createBitmap(temp1,xtilepos,0,xtilepos+tilesize,tilesize);

带有

returnbitmap[iter]=Bitmap.createBitmap(temp1,xtilepos,0,tilesize,tilesize);

最新更新