gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:57:21 25 4
gpt4 key购买 nike

我有一个静态方法,它应该加载 strip 图像,并返回带有图像 strip 每个图 block 的 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,但就在异常 xtilepos 仅达到 1792 之前...可能大约是 temp1 宽度的一半。

tilesize 在这种情况下是 128,returnbitmap.length 是 28,与我的图像条中的子图像数量相同。

一开始我并没有真正预料到的是我使用的 strip 图像是 896x32,最初用于我的一个桌面 Java 游戏,但在 Android 上一切似乎都乘以 4。

我不知道为什么我得到一个 IllegalArgumentException: x + width must be <= bitmap.width() when 1792 +128 <3584

这是 Strip 图像太宽还是什么的问题?我需要制作双行或三行 strip 图像吗?

最佳答案

您正在为 Bitmap 创建传递 x+width 而不仅仅是宽度。

Bitmap.createBitmap() will itself add @paramwidth to @paramx.

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

简单的改变

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

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

关于Java Android Bitmap.createBitmap 过早地超过 src 位图宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58894940/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com