用Android Canvas Bitmap 绘图
问题:
  1 Canvas生成一个Bitmap时,这时候已经占内存了吗?还是往Bitmap上画东西的时候才分配内存?
      如果占内存的话,Canvas生成一个Bitmap,最大能生成多大的Bitmap?
      且如何控制所占的内存?  2 根据上面1的问题,我绘制一个内存极限最大的Bitmap,
      想把这个Bitmap分区域绘制 然后输出到屏幕 如何实现???望各位高手不吝赐教  提供宝贵思路!!!!

解决方案 »

  1.   

    有点类似JME绘动画 双缓冲是必须的 但具体的思路还是等高人来吧
      

  2.   

    第一个问题,画的时候才会占用内存。
    第二个问题,就是极限的问题,不存在,如果内存足够大,是可以的,但是分配的内存是是按照当时系统可以分配的内存来决定的,所以很多时候都会出现OOM错误,这个问题我也在想办法解决。
      

  3.   

    Bitmap上能分成若干个层 然后去绘制屏幕当前显示的这个层吗?
      

  4.   

    1.内存是在你创建图片的时候就直接分配出来的,比如你通过decodeFile创建一个图片后,内存就被占用了,你可以通过单步调试的方式,配合ddms来查看内存的分配状态。
    能分配多大要看当前设备剩余的内存大小,和可分配的空间大小,一般png的图片都不会超过1M,所以创建基本不会有问题2.不要打擦边球,需要多大内存就分配多大内存,绝对不要使用过大的图片,图像解码超过8M就OOM了,双缓冲是必须的,一样的图片如果反复绘制的话,不需要每次都创建bitmap,比如,有一个背景,上面绘制了10个图片,但是这个背景永远都就画这10个图片,那因为用双缓冲,所以一次创建完换成bitmap后,就把缓冲bitmap记录下来,下次判断一下这个缓冲,如果!=null,就直接绘制,不需要在创建。
      

  5.   

    第一个问题,画的时候才会占用内存。
    第二个问题,就是极限的问题,不存在,如果内存足够大,是可以的,但是分配的内存是是按照当时系统可以分配的内存来决定的,所以很多时候都会出现OOM错误,这个问题我也在想办法解决。
      

  6.   

    我现在想把一个极限大的bitmap分割成若干小块来实现
    就像google地图那样
    加载的时候是若干个图层拼接加载的
    拖拽的时候 露出来的图层区域加载 隐藏的图层部分内存释放
    对于bitmap来说 怎么操作呢????
      

  7.   

    这个可以操作,但是自己要重新写图片的解吸,呵呵,在android上实现估计有点困难。
      

  8.   

    拖拽的时候 露出来的图层区域加载 隐藏的图层部分内存释放
    对于bitmap来说 怎么操作呢????这个就麻烦了,更容易OOM了,每次显示新的位图还要把旧的干掉...这个内存很容易不够的。
    等待做过的高人了~
      

  9.   

    bitmap其实就是一个二维数组,当我们用
    Bitmap.createBitmap(width,height, Bitmap.Config.ARGB_8888);
    创建一个bitmap时,width、height通常分别是手机屏幕宽、高含有的像素个数。
    因为像素个数为整数,我个人认为,没必要创建超过手机宽高像素个数的二维像素数组(bitmap)。
    仅供参考。
      

  10.   


    做这个不需要一张非常大的图。这没有必要。 最精简的做法你只需要一个和屏幕等大小的bitmap,然后再用户移动的过程中,重新绘制他。 绘制完后,把bitmap绘制到view上。如果想流畅一些,可以以屏幕的9倍方向为准, 类似九宫格。 当前屏幕在中间那格。在移动时,直接将其他格的内容绘制到屏幕上,然后更新格子的内容。 这类似于scrollview 的做法。那个android带有的浏览器的做法,我猜测是有多大,就绘制多大。就是说你做游戏的时候,一张地图全部绘制出来。然后屏幕就是一个视窗,在绘制时只把当前的那一块绘制到屏幕上。人物在动的时候,只重绘bitmap的一小部分。 然后再把更改过的拷贝到前台。
      

  11.   

    能分配多大的位图,我想这个只收手机内存的限制。 可以算一下嘛。 w*h*3 byte 。 你自己可以算一下。 
      

  12.   

    画布有几层意思的。
    对bitmap的,你创建图片的时候就会有的。而你要画到屏幕的surface上,这个surface也有个canvas,它的大小就屏幕那么大, 二维拷贝一下就可以了。
      

  13.   

    1 Canvas生成一个Bitmap时,这时候已经占内存了吗?还是往Bitmap上画东西的时候才分配内存?
      如果占内存的话,Canvas生成一个Bitmap,最大能生成多大的Bitmap?
      且如何控制所占的内存?
    ——————————————————————————
      生成的时候已经占内存了,最大生成的Bitmap没有限制,只要不超过内存即可,但是游戏中不会生成很大的Bitmap,最多也就是比屏幕稍微大一些的而已。  2 根据上面1的问题,我绘制一个内存极限最大的Bitmap,
      想把这个Bitmap分区域绘制 然后输出到屏幕 如何实现???——————————————————————————————————
      API中有刷新部分区域的方法的,类似以前J2ME中的repaint方法  3、Bitmap上能分成若干个层 然后去绘制屏幕当前显示的这个层吗? 
    ————————————————————————————————
    一个Bitmap是没有层的概念的,多个Bitmap且上层的是背景透明的图片时有层的概念的