社区
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分区域绘制 然后输出到屏幕 如何实现???
望各位高手不吝赐教 提供宝贵思路!!!!
...全文
2235
21
打赏
收藏
Android Canvas Bitmap
用Android Canvas Bitmap 绘图 问题: 1 Canvas生成一个Bitmap时,这时候已经占内存了吗?还是往Bitmap上画东西的时候才分配内存? 如果占内存的话,Canvas生成一个Bitmap,最大能生成多大的Bitmap? 且如何控制所占的内存? 2 根据上面1的问题,我绘制一个内存极限最大的Bitmap, 想把这个Bitmap分区域绘制 然后输出到屏幕 如何实现??? 望各位高手不吝赐教 提供宝贵思路!!!!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
圆形头像实现
下面我们将详细探讨如何在
Android
中实现真正的圆形头像,包括使用自定义View、肖像模式、
Bitmap
的处理技巧以及性能优化。 首先,我们可以通过创建一个自定义的ImageView子类来实现圆形头像。这个自定义View需要覆盖...
Android
系统截屏功能提取Demo
Canvas
canvas
= new
Canvas
(
bitmap
); ``` 4. **绘制当前视图到
Canvas
**:为了获取当前活动的视图内容,我们需要先将其转换为一个ViewGroup,然后绘制到
Canvas
上: ```java ViewGroup decorView = (ViewGroup) ...
Android
完美实现图片圆角和圆形( bug修复后)
canvas
.drawCircle(
bitmap
.getWidth() / 2,
bitmap
.getHeight() / 2,
bitmap
.getWidth() / 2, paint); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
canvas
.draw
Bitmap
(
bitmap
, rect, ...
Android
开发实现圆形头像剪切
canvas
.drawCircle(
bitmap
.getWidth() / 2,
bitmap
.getHeight() / 2,
bitmap
.getWidth() / 2, paint); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
canvas
.draw
Bitmap
(
bitmap
, rect, ...
Android
裁剪图片为圆形图片Demo
在onDraw()中,我们使用
Canvas
来绘制
Bitmap
,
Canvas
是
Android
系统中进行2D图形绘制的主要接口。通过
Canvas
的draw
Bitmap
()方法,我们可以指定绘制区域的形状。 关键步骤在于如何将矩形
Bitmap
转换为圆形。这里可以...
Android
80,472
社区成员
91,384
社区内容
发帖
与我相关
我的任务
Android
移动平台 Android
复制链接
扫一扫
分享
社区描述
移动平台 Android
android
android-studio
androidx
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章