社区
Android
帖子详情
Android Canvas Bitmap
dllgdx2000
2011-02-11 03:27:26
用Android Canvas Bitmap 绘图
问题:
1 Canvas生成一个Bitmap时,这时候已经占内存了吗?还是往Bitmap上画东西的时候才分配内存?
如果占内存的话,Canvas生成一个Bitmap,最大能生成多大的Bitmap?
且如何控制所占的内存?
2 根据上面1的问题,我绘制一个内存极限最大的Bitmap,
想把这个Bitmap分区域绘制 然后输出到屏幕 如何实现???
望各位高手不吝赐教 提供宝贵思路!!!!
...全文
2283
21
打赏
收藏
Android Canvas Bitmap
用Android Canvas Bitmap 绘图 问题: 1 Canvas生成一个Bitmap时,这时候已经占内存了吗?还是往Bitmap上画东西的时候才分配内存? 如果占内存的话,Canvas生成一个Bitmap,最大能生成多大的Bitmap? 且如何控制所占的内存? 2 根据上面1的问题,我绘制一个内存极限最大的Bitmap, 想把这个Bitmap分区域绘制 然后输出到屏幕 如何实现??? 望各位高手不吝赐教 提供宝贵思路!!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
不知道为什么那么多人回答认为画图时才会创建内存呢?这个情况你搞清楚了吗?
图像在创建时就已经有内存了,不信的话你可以跟踪内存情况看。
建议没有完全搞清楚的人不要误导别人
吃饭睡觉打小白
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)
Android
中new
Canvas
(
Bitmap
)引发的对
Canvas
和
Bitmap
关系的疑问
本文主要介绍了
Android
中
Canvas
和
Bitmap
的关系,创建
Canvas
需传递
Bitmap
承载内容,还提到Drawable是可绘制对象,
Bitmap
是其一种。此外,分享了面试复习路线,涵盖架构师技能、性能调优等,还推荐了相关电子书和笔记,强调阅读源码对技术提升的重要性。
Android
中new
Canvas
(
Bitmap
)引发的对
Canvas
和
Bitmap
关系的疑问,被阿里面试官征服了
本文详细探讨了
Android
中
Canvas
与
Bitmap
的关系,解释为何创建
Canvas
时必须传入
Bitmap
。
Canvas
作为绘画媒介,所有绘制操作最终都会存储到
Bitmap
中。同时,提到Drawable的概念,它是可绘制对象的抽象,包括
Bitmap
Drawable等。文章还指出了使用
Bitmap
Factory.decodeResource()创建的
Bitmap
默认不可用于
Canvas
绘制,需要通过
Bitmap
.create
Bitmap
()创建可变
Bitmap
。最后,作者分享了自己的
Android
开发经验和学习资源。
Android
中new
Canvas
(
Bitmap
)引发的对
Canvas
和
Bitmap
关系的疑问(1),网易
Android
面试必问
本文解释了在
Android
开发中如何理解
Canvas
与
Bitmap
的关系,
Canvas
需要
Bitmap
来承载画作,且
Bitmap
必须是可变的才能用于
Canvas
。还提到了Drawable的概念及其与
Bitmap
的关系。此外,还提及了
Bitmap
Factory.decodeResource可能导致的问题,因为返回的
Bitmap
默认是不可变的。
Android
中new
Canvas
(
Bitmap
)引发的对
Canvas
和
Bitmap
关系的疑问(1)
本文解释了在
Android
开发中
Canvas
、
Bitmap
和Drawable的概念,强调
Canvas
需要
Bitmap
来存储像素,且
Bitmap
必须是可变的才能用于
Canvas
。同时提及Drawable是一个通用的绘画抽象,与
Bitmap
和
Canvas
一起构成图形绘制的基础。最后讨论了
Bitmap
Factory和
Canvas
构造函数对
Bitmap
mutability的要求。,
android
bitmap
插件,plus.nativeObj.
Bitmap
在安卓上无法截取chart插件里的
canvas
部分
博客给出了一段
Android
截屏代码,通过H5 plus事件处理,将webview内容绘制到
Bitmap
对象并保存。但截出的图片分享到朋友圈chart里的
canvas
无法显示,博主寻求解答。
Android
80,490
社区成员
91,374
社区内容
发帖
与我相关
我的任务
Android
移动平台 Android
复制链接
扫一扫
分享
社区描述
移动平台 Android
android
android-studio
androidx
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章