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

 更新时间:2013年07月02日 15:02:02   作者:  
这篇文章介绍了在Android中画图并保存图片的实例,以下是具体的实现方法,有需要的朋友可以参考一下
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; 
   }

相关文章

  • 详解Android沉浸式实现兼容解决办法

    详解Android沉浸式实现兼容解决办法

    本篇文章主要介绍了详解Android沉浸式实现兼容解决办法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • 详解Dagger2在Android开发中的新用法

    详解Dagger2在Android开发中的新用法

    本篇文章主要介绍了Dagger2在Android开发中的新用法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • Kotlin协程之Flow触发与消费示例解析

    Kotlin协程之Flow触发与消费示例解析

    Kotlin协程中,当需要消费流时,会调用collect方法,触发流的消费,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-09-09
  • Android编程之单元测试实例分析

    Android编程之单元测试实例分析

    这篇文章主要介绍了Android编程之单元测试,结合具体实例分析了Android单元测试的具体实现步骤与相关注意事项,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • Android自定义TipView仿QQ长按后的提示窗口

    Android自定义TipView仿QQ长按后的提示窗口

    这篇文章主要介绍了Android自定义TipView仿QQ长按后的提示窗口,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • Android组件ListView列表简单使用

    Android组件ListView列表简单使用

    这篇文章主要为大家详细介绍了Android组件ListView列表的简单使用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • Android仿直播特效之点赞飘心效果

    Android仿直播特效之点赞飘心效果

    这篇文章主要为大家详细介绍了Android实现点赞飘心效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • Kotlin 协程与挂起函数及suspend关键字深入理解

    Kotlin 协程与挂起函数及suspend关键字深入理解

    这篇文章主要为大家介绍了Kotlin 协程与挂起函数及suspend关键字深入理解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Kotlin协程之Flow异常示例处理

    Kotlin协程之Flow异常示例处理

    这篇文章主要为大家介绍了Kotlin协程之Flow异常处理,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • 在Android Studio中使用BaiduMap SDK实时获取当地位置信息

    在Android Studio中使用BaiduMap SDK实时获取当地位置信息

    这篇文章主要介绍了在Android Studio中使用BaiduMap SDK实时获取当地位置信息 的相关资料,需要的朋友可以参考下
    2016-03-03

最新评论