欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android画图并保存图片的具体实现代码

程序员文章站 2023-01-02 08:55:19
canvas是一个画布,你可以建立一个空白的画布,就直接new一个canvas对象,不需要参数。也可以先使用bitmapfactory创建一个bitmap对象,作为新的ca...
canvas是一个画布,你可以建立一个空白的画布,就直接new一个canvas对象,不需要参数。
也可以先使用bitmapfactory创建一个bitmap对象,作为新的canvas对象的参数,也就是说这个画布不是空白的,
如果你想保存图片的话,最好是bitmap是一个新的,而不是从某个文件中读入进来的,或者是drawable对象。

然后使用canvas画第一张图上去,在画第二张图上去,最后使用canvas.save(int flag)的方法进行保存,注意save方法里面的参数可以保存单个图层,
如果是保存全部图层的 话使用 save( canvas.all_save_flag )。

最后所有的信息都会保存在第一个创建的bitmap中。代码如下:
java代码
复制代码 代码如下:

/**
    * create the bitmap from a byte array
    *
    * @param src the bitmap object you want proecss
    * @param watermark the water mark above the src
    * @return return a bitmap object ,if paramter's length is 0,return null
    */ 
   private bitmap createbitmap( bitmap src, bitmap watermark ) 
   { 
       string tag = "createbitmap"; 
       log.d( tag, "create a new bitmap" ); 
       if( src == null ) 
       { 
           return null; 
       } 

       int w = src.getwidth(); 
       int h = src.getheight(); 
       int ww = watermark.getwidth(); 
       int wh = watermark.getheight(); 
       //create the new blank bitmap 
       bitmap newb = bitmap.createbitmap( w, h, config.argb_8888 );//创建一个新的和src长度宽度一样的位图 
       canvas cv = new canvas( newb ); 
       //draw src into 
       cv.drawbitmap( src, 0, 0, null );//在 0,0坐标开始画入src 
       //draw watermark into 
       cv.drawbitmap( watermark, w - ww + 5, h - wh + 5, null );//在src的右下角画入水印 
       //save all clip 
       cv.save( canvas.all_save_flag );//保存 
       //store 
       cv.restore();//存储 
       return newb; 
   } 

 对图片进行缩小的方法:
java代码
复制代码 代码如下:

/**
    * lessen the bitmap
    *
    * @param src bitmap
    * @param destwidth the dest bitmap width
    * @param destheigth
    * @return new bitmap if successful ,oherwise null
    */ 
   private bitmap lessenbitmap( bitmap src, int destwidth, int destheigth ) 
   { 
       string tag = "lessenbitmap"; 
       if( src == null ) 
       { 
           return null; 
       } 
       int w = src.getwidth();//源文件的大小 
       int h = src.getheight(); 
       // calculate the scale - in this case = 0.4f 
       float scalewidth = ( ( float ) destwidth ) / w;//宽度缩小比例 
       float scaleheight = ( ( float ) destheigth ) / h;//高度缩小比例 
       log.d( tag, "bitmap width is :" + w ); 
       log.d( tag, "bitmap height is :" + h ); 
       log.d( tag, "new width is :" + destwidth ); 
       log.d( tag, "new height is :" + destheigth ); 
       log.d( tag, "scale width is  :" + scalewidth ); 
       log.d( tag, "scale height is  :" + scaleheight ); 
       matrix m = new matrix();//矩阵 
       m.postscale( scalewidth, scaleheight );//设置矩阵比例 
       bitmap resizedbitmap = bitmap.createbitmap( src, 0, 0, w, h, m, true );//直接按照矩阵的比例把源文件画入进行 
       return resizedbitmap; 
   }