【发布时间】:2012-07-27 05:29:11
【问题描述】:
我正在尝试在我的设备上为某个人的一些动作设置动画。我创建了一个精灵表,最终为 1.23Mb。图像尺寸为 5000 x 1500 像素。工作表有 8 行,每行都是它自己的操作。 (走,鞠躬,跳……)。最长的动作是 32 张图像。所以图像基本上是 32 列,8 行。所以,现在我加载它:
只要我这样做:
private Bitmap bmp;
bmp = BitmapFactory.decodeResource(getResources(), R.drawable.myImage);
我收到一个错误:
线程 [ main](挂起(OutOfMemoryError 异常))
BitmapFactory.decodeResource(Resources, int, BitmapFactory$Options) 行:385 BitmapFactory.decodeResource(Resources, int) 行:404
GameView.(Context) 行:25 FightActivity.onCreate(Bundle) 行:13 FightActivity(Activity).performCreate(Bundle) 行:4465
Instrumentation.callActivityOnCreate(Activity, Bundle) 行:1049
ActivityThread.performLaunchActivity(ActivityThread$ActivityClientRecord, 意图)行:1920
ActivityThread.handleLaunchActivity(ActivityThread$ActivityClientRecord, Intent) 行:1981 ActivityThread.access$600(ActivityThread, ActivityThread$ActivityClientRecord, Intent) 行:123
ActivityThread$H.handleMessage(Message) 行:1147
ActivityThread$H(Handler).dispatchMessage(Message) 行:99 Looper.loop() 行:137 ActivityThread.main(String[]) 行:4424
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) 行:不可用 [本机方法] Method.invoke(Object, 对象...) 行:511 ZygoteInit$MethodAndArgsCaller.run() 行:784
ZygoteInit.main(String[]) 行:551 NativeStart.main(String[]) 行:不可用[本机方法]
我是否受限于某个文件大小?看起来很奇怪?如果是这样,我唯一的选择是将精灵分割成单独的“动作”图像,而不是在一个大精灵表中的每行一系列动作图像?
希望有人可以帮助新手。
【问题讨论】:
-
澄清 - 您是否要制作 32*5k x 8*1.5k = 19.2 亿像素的图像?导致 32 位进程崩溃没有问题。
-
不,抱歉。该图像大小为 5,000 x 1,500 像素,文件大小为 1.23 MB。该图像包含 8 行“帧”,即每行 32 帧。因此,它包含 32x8 的图像,然后我将其显示。因此,它包含 256 个小图像。
-
文件大小不是问题,你的分辨率是
-
我第一次创建图像时,它只有 5 行 32 张图像,文件大小为 0.8 Meg。它工作得很好。然后我在文件中添加了 3 行图像。相同的分辨率.. 但现在,更大。而现在它失败了。所以,因为我已经到了 1500 到 5000(当它只有 5 行时可能是 3000 到 1500),这就是问题所在?这是个问题。 :(
-
想法:1) 检查格式 - 你需要 32 位还是 8 位。2) 使图像更小[将其拆分或缩小]。 3) 为什么不是两个分辨率的幂?