Android Canvas Bitmap

dllgdx2000 2011-02-11 03:27:26
用Android Canvas Bitmap 绘图
问题:
1 Canvas生成一个Bitmap时,这时候已经占内存了吗?还是往Bitmap上画东西的时候才分配内存?
如果占内存的话,Canvas生成一个Bitmap,最大能生成多大的Bitmap?
且如何控制所占的内存?

2 根据上面1的问题,我绘制一个内存极限最大的Bitmap,
想把这个Bitmap分区域绘制 然后输出到屏幕 如何实现???

望各位高手不吝赐教 提供宝贵思路!!!!
...全文
2228 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
网络咖啡 2011-11-10
  • 打赏
  • 举报
回复
1 Canvas生成一个Bitmap时,这时候已经占内存了吗?还是往Bitmap上画东西的时候才分配内存?
如果占内存的话,Canvas生成一个Bitmap,最大能生成多大的Bitmap?
且如何控制所占的内存?
——————————————————————————
生成的时候已经占内存了,最大生成的Bitmap没有限制,只要不超过内存即可,但是游戏中不会生成很大的Bitmap,最多也就是比屏幕稍微大一些的而已。

2 根据上面1的问题,我绘制一个内存极限最大的Bitmap,
想把这个Bitmap分区域绘制 然后输出到屏幕 如何实现???

——————————————————————————————————
API中有刷新部分区域的方法的,类似以前J2ME中的repaint方法

3、Bitmap上能分成若干个层 然后去绘制屏幕当前显示的这个层吗?
————————————————————————————————
一个Bitmap是没有层的概念的,多个Bitmap且上层的是背景透明的图片时有层的概念的
NPE脑残粉 2011-11-10
  • 打赏
  • 举报
回复
关注,求解!
不用了的号 2011-07-21
  • 打赏
  • 举报
回复
求解,碰到同样的问题了
siyulanyu 2011-05-19
  • 打赏
  • 举报
回复
旁观,应该存在就分配内存了,见过一个程序,图片循环,销毁没处理好,四个图片不一会就溢出了
freshui 2011-02-15
  • 打赏
  • 举报
回复
画布有几层意思的。
对bitmap的,你创建图片的时候就会有的。

而你要画到屏幕的surface上,这个surface也有个canvas,它的大小就屏幕那么大, 二维拷贝一下就可以了。
netlib 2011-02-14
  • 打赏
  • 举报
回复
不知道为什么那么多人回答认为画图时才会创建内存呢?这个情况你搞清楚了吗?

图像在创建时就已经有内存了,不信的话你可以跟踪内存情况看。

建议没有完全搞清楚的人不要误导别人
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 jianwei824 的回复:]
内存即是屏幕占用的像素点占用的空间,一个数组
重绘的方法:就是分割一个数组,这个数组中包含的是整个屏幕的像素
[/Quote]
哥们 你的头像太吓人 晕了
jianwei824 2011-02-14
  • 打赏
  • 举报
回复
内存即是屏幕占用的像素点占用的空间,一个数组
重绘的方法:就是分割一个数组,这个数组中包含的是整个屏幕的像素
netlib 2011-02-12
  • 打赏
  • 举报
回复
1 创建时就已经分内存,这时的数据是默认的,一般全是0,所以是一张黑色的图,画时只改变内存数值
2 如果你是想作测试,测试手机的极限,那你就作吧,作完后给大家说说,如果你是作应用,这样的应用对用户来说太不爽了,你说呢?
dinjay 2011-02-12
  • 打赏
  • 举报
回复
1.内存是在你创建图片的时候就直接分配出来的,比如你通过decodeFile创建一个图片后,内存就被占用了,你可以通过单步调试的方式,配合ddms来查看内存的分配状态。
能分配多大要看当前设备剩余的内存大小,和可分配的空间大小,一般png的图片都不会超过1M,所以创建基本不会有问题

2.不要打擦边球,需要多大内存就分配多大内存,绝对不要使用过大的图片,图像解码超过8M就OOM了,双缓冲是必须的,一样的图片如果反复绘制的话,不需要每次都创建bitmap,比如,有一个背景,上面绘制了10个图片,但是这个背景永远都就画这10个图片,那因为用双缓冲,所以一次创建完换成bitmap后,就把缓冲bitmap记录下来,下次判断一下这个缓冲,如果!=null,就直接绘制,不需要在创建。
qthsrs232 2011-02-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 bigpretty 的回复:]
第一个问题,画的时候才会占用内存。
第二个问题,就是极限的问题,不存在,如果内存足够大,是可以的,但是分配的内存是是按照当时系统可以分配的内存来决定的,所以很多时候都会出现OOM错误,这个问题我也在想办法解决。
[/Quote]

关注
dllgdx2000 2011-02-12
  • 打赏
  • 举报
回复
Bitmap上能分成若干个层 然后去绘制屏幕当前显示的这个层吗?
TaiJi1985 2011-02-12
  • 打赏
  • 举报
回复
能分配多大的位图,我想这个只收手机内存的限制。 可以算一下嘛。 w*h*3 byte 。 你自己可以算一下。
TaiJi1985 2011-02-12
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 dllgdx2000 的回复:]

引用 5 楼 dinjay 的回复:
1.内存是在你创建图片的时候就直接分配出来的,比如你通过decodeFile创建一个图片后,内存就被占用了,你可以通过单步调试的方式,配合ddms来查看内存的分配状态。
能分配多大要看当前设备剩余的内存大小,和可分配的空间大小,一般png的图片都不会超过1M,所以创建基本不会有问题

2.不要打擦边球,需要多大内存就分配多大内存,绝对不要使用过大的图……
[/Quote]

做这个不需要一张非常大的图。这没有必要。 最精简的做法你只需要一个和屏幕等大小的bitmap,然后再用户移动的过程中,重新绘制他。 绘制完后,把bitmap绘制到view上。

如果想流畅一些,可以以屏幕的9倍方向为准, 类似九宫格。 当前屏幕在中间那格。在移动时,直接将其他格的内容绘制到屏幕上,然后更新格子的内容。 这类似于scrollview 的做法。

那个android带有的浏览器的做法,我猜测是有多大,就绘制多大。就是说你做游戏的时候,一张地图全部绘制出来。然后屏幕就是一个视窗,在绘制时只把当前的那一块绘制到屏幕上。人物在动的时候,只重绘bitmap的一小部分。 然后再把更改过的拷贝到前台。
programs 2011-02-12
  • 打赏
  • 举报
回复
bitmap其实就是一个二维数组,当我们用
Bitmap.createBitmap(width,height, Bitmap.Config.ARGB_8888);
创建一个bitmap时,width、height通常分别是手机屏幕宽、高含有的像素个数。
因为像素个数为整数,我个人认为,没必要创建超过手机宽高像素个数的二维像素数组(bitmap)。
仅供参考。
dinjay 2011-02-12
  • 打赏
  • 举报
回复
拖拽的时候 露出来的图层区域加载 隐藏的图层部分内存释放
对于bitmap来说 怎么操作呢????

这个就麻烦了,更容易OOM了,每次显示新的位图还要把旧的干掉...这个内存很容易不够的。
等待做过的高人了~
bigpretty 2011-02-12
  • 打赏
  • 举报
回复
这个可以操作,但是自己要重新写图片的解吸,呵呵,在android上实现估计有点困难。
dllgdx2000 2011-02-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 dinjay 的回复:]
1.内存是在你创建图片的时候就直接分配出来的,比如你通过decodeFile创建一个图片后,内存就被占用了,你可以通过单步调试的方式,配合ddms来查看内存的分配状态。
能分配多大要看当前设备剩余的内存大小,和可分配的空间大小,一般png的图片都不会超过1M,所以创建基本不会有问题

2.不要打擦边球,需要多大内存就分配多大内存,绝对不要使用过大的图片,图像解码超过8M就OOM了,双缓冲是必……
[/Quote]
我现在想把一个极限大的bitmap分割成若干小块来实现
就像google地图那样
加载的时候是若干个图层拼接加载的
拖拽的时候 露出来的图层区域加载 隐藏的图层部分内存释放
对于bitmap来说 怎么操作呢????
甜tianquan 2011-02-12
  • 打赏
  • 举报
回复
第一个问题,画的时候才会占用内存。
第二个问题,就是极限的问题,不存在,如果内存足够大,是可以的,但是分配的内存是是按照当时系统可以分配的内存来决定的,所以很多时候都会出现OOM错误,这个问题我也在想办法解决。
bigpretty 2011-02-11
  • 打赏
  • 举报
回复
第一个问题,画的时候才会占用内存。
第二个问题,就是极限的问题,不存在,如果内存足够大,是可以的,但是分配的内存是是按照当时系统可以分配的内存来决定的,所以很多时候都会出现OOM错误,这个问题我也在想办法解决。
加载更多回复(1)

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧