`
zhiweiofli
  • 浏览: 511789 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Android的图片叠加

阅读更多

 

android.graphics.Bitmap.Config是一个枚举类型,里面定义了位图的四种格式.

ALPHA_8,ARGB_4444,ARGB_8888都是透明的位图,也就是所字母A代表透明.

从名字中可以看出:

    ALPHA_8: 一种透明度为8位的位图.

    ARGB_4444: A,R,G,B,每一个参数由4bit表示,是一种16位的位图.

    ARGB_8888: A,R,G,B,每一个参数由8bit来表示,是一种32位的位图.

    RGB_565: R,G,B,三个参数分别占5bit,6bit,5bit,是一种三原色通道经过压缩的16位位图.

Bitmap newBitmap = Bitmap. createBitmap( imgMapWidth,imgMapHeight , Bitmap.Config.RGB_565 );
  
android中可以通过以上的方式来创建一BMP格式的位图,只是图片的宽和高的值太大时,会使android的VM产生内存溢出的Exception,解决的方法之一,在生成该对象时,通过设Bitmap.Config,来压缩该位图在生成时的大小。从上面的4个属性值看来,压缩的最大值可以达到2^8。

以下方法能有效解决新建位图的大小过大的问题:
    imageMap是一位图的对象,尺寸有点大,1800*1600,用上面的方法创建位图会抛出异常。
    以下的方法通过判断当前的位图是否可画(可在上面画图),而决定是否复制一新对象,然后在可画图的对象上新建一画布,然后在上面画图,最后就是保存了。
//在指定的位图上添加图标
private Bitmap addMarkToImageMap(int x, int y){
    //创建一个和原图同样大小的位图 
    //Bitmap newBitmap = Bitmap.createBitmap(imgMapWidth,imgMapHeight, Bitmap.Config.RGB_565);
    Bitmap newBitmap = imageMap;
    if(!newBitmap.isMutable()){
         newBitmap = imageMap.copy(Bitmap.Config.RGB_565, true);
    }
    Canvas canvas = new Canvas(newBitmap);
    canvas.drawBitmap( markImg, x, y, paint );//插入图标 
    canvas.save(Canvas. ALL_SAVE_FLAG); 
    //存储新合成的图片
    canvas.restore(); 
    return newBitmap;  
}
 
顺便延伸一下,在图片上写字的例子就出来了:

 /**
      * 图片上画字
      * */
     private Bitmap drawTextAtBitmap(Bitmap bitmap,String text){
          
          int x = bitmap.getWidth();
          int y = bitmap.getHeight();
          
          // 创建一个和原图同样大小的位图
          Bitmap newbit = Bitmap.createBitmap(x, y, Bitmap.Config.ARGB_8888);
          
          Canvas canvas = new Canvas(newbit);
          
          Paint paint = new Paint();
          
          // 在原始位置0,0插入原图
          canvas.drawBitmap(bitmap, 0, 0, paint);
          
          paint.setColor(Color.parseColor("#dedbde"));
          
          paint.setTextSize(20);
          
          // 在原图指定位置写上字
          canvas.drawText(text, 53 , 30, paint);
          
          canvas.save(Canvas.ALL_SAVE_FLAG);
          
          // 存储
          canvas.restore();
          
          return newbit;
     }
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics