Android - 动态缩放比预缩放更快,wtf?

标签 android bitmap scaling

我正在尝试编写我的第一个 Android 游戏,其中包含带有位图的移动圆形对象。

我对 png 进行解码:

moon=BitmapFactory.decodeResource(resources, R.drawable.moon);

然后,对于每个 Ball 对象,我在开始时都这样做(它们的大小可以不同):

scaledMoon=Bitmap.createScaledBitmap(game.moon, (int)(r*2), (int)(r*2), true);

在 Canvas 上绘图时,我会这样做:

c.drawBitmap(scaledMoon,x,y, null);

对 100 个对象执行此操作,我获得了几乎恒定的 22 毫秒渲染时间。

但是当我这样做时(之前没有缩放!)

c.drawBitmap(game.moon, new Rect(0,0,game.moon.getWidth(),game.moon.getHeight()), new Rect((int)(x-r),(int)(y-r),(int)(x+r),(int)(y+r)), null);

我得到 17 毫秒的渲染时间...

只画一个圆

c.drawCircle(x, y, r, color);

我得到 24 毫秒

什么……?

最佳答案

您呈现最快的第 3 行是因为您重复使用了相同的位图,而不是用您之前尝试预加载的所有位图填充视频内存;它不是在制作一个新的,它只是为你想画的东西设定界限。至于绘制一个圆的 24 毫秒,我最好的选择是计算和绘制点比一个简单的矩形需要更长的时间。

关于Android - 动态缩放比预缩放更快,wtf?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8023607/

相关文章:

rotation - SDL_RenderSetScale 错误地应用于 SDL2 (2.0.3) 中的旋转位图

android - 让 Android 进入休眠状态以进行测试

android - 处理程序和多个 Activity

android - 仍然得到 E/JavaBinder:!!!失败的 BINDER 交易 !!!错误甚至图像已压缩

java - Ruby on Rails 与 jRuby

.net - 用于 Azure 扩展的 Wasabi block 多久收集一次数据?

java - 简单的 Android Activity 导致崩溃

c# - 从 URL 保存 GIF

java - 在 android studio 中存储位图与使用 url 获取位图

java - 动态改变imageView中的位图,android