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

这篇文章介绍了在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; 
   }

时间: 2024-11-01 19:40:00

Android画图并保存图片的具体实现代码的相关文章

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

Canvas是一个画布,你可以建立一个空白的画布,就直接new一个Canvas对象,不需要参数.也可以先使用BitmapFactory创建一个Bitmap对象,作为新的Canvas对象的参数,也就是说这个画布不是空白的,如果你想保存图片的话,最好是Bitmap是一个新的,而不是从某个文件中读入进来的,或者是Drawable对象. 然后使用Canvas画第一张图上去,在画第二张图上去,最后使用Canvas.save(int flag)的方法进行保存,注意save方法里面的参数可以保存单个图层,如果

Android中获得手机屏幕大小实现代码

  这篇文章主要介绍了Android中获得手机屏幕大小实现代码,Android开发中经常需要获得屏幕的宽高,本文直接封装成一个工具类,需要的朋友可以参考下 Android在自定义控件时,经常需要获得屏幕的宽高,每次都要写,不妨直接把他封装成工具类,直接拿来用,废话不说,直接上代码 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39

android l流量监控-android 流量监控 求断开网络连接代码实现

问题描述 android 流量监控 求断开网络连接代码实现 android 流量监控,流量超出时断开网络连接 求断开网络连接代码实现 求代码求逻辑 我找了好久都是监测网络连接状态的,要断开网络连接的代码

c语言-android项目中JNI调用的C代码

问题描述 android项目中JNI调用的C代码 最近的一个项目,需要通过JNI在串口中读取数据,读取数据并返回的代码是用C语言写的.我对C语言很陌生,哪位大神帮帮忙,帮忙撸几句代码.JNIEXPORT jbyteArray JNICALL Java_com_cem_serialdevdemo_CodeJNI_ReadRfidSerialPort (JNIEnv env jobject obj){//大致的思路是: int rev=0; unsigned char sof; unsigned c

SP吸费瞄上Android平台 40%应用植入扣费代码

如果有人告诉你,目前中国1000万Android手机用户常接触到的应用程序(APP)中有30%到40%被人动了手脚,篡改后植入了恶意吸费代码,你很可能觉得他在信口开河或是不良安全厂商的枪手在故意恐吓你.很遗憾,这是真实的,并且有进一步蔓延的趋势.网易科技经过持续调查后了解到,目前国内至少有10家SP(电信增值服务商)或渠道商(借SP的收费渠道)在做Android平台的吸费生意,他们的手段比山寨机吸费要高明的多,用户几乎察觉不到;Android应用开发者也是其中的受害者. 在机锋网上,很多网友发帖

跪求-谁能帮忙解释下android中的TranslateAnimation相关的下面代码,谢谢!!!

问题描述 谁能帮忙解释下android中的TranslateAnimation相关的下面代码,谢谢!!! @Override10 public void onPageSelected(int arg0) {11 Animation animation = null;12 switch (arg0) {13 case 0:14 if (currIndex == 1) {15 animation = new TranslateAnimation(one 0 0 0);16 } else if (cu

如何在Android 下用jni调用下面c代码进行g711编码?

问题描述 如何在Android 下用jni调用下面c代码进行g711编码? unsigned char encode(short pcm); short decode(unsigned char alaw); /** 个人理解 bitsize 应该为16, pBuffer(pcm数据) 两个char 合成一个 short ,长度自然就是原来的一半(nBufferSize/2), 通过编码后short类型的数据变为char类型,让后复制给pCodecBits/ int g711_encode(un

图片-Android画图问题,快来看看

问题描述 Android画图问题,快来看看 自己画了一个View,原本边上是白色的,当当前Activity进入下一个Activity,返回时, 变成了透明的?------为什么,使用了ProterBuffXFermode来画的 解决方案 你就直接设置paint的颜色为白色就行了 解决方案二: android画图遇到的问题 解决方案三: 你就直接设置paint的颜色为白色就行了

android 控件设置背景以后再代码中改变的时候对不其

android 控件设置背景以后再代码中改变的时候对不齐,我在xml文件中给Button设置了背景,但是在代码中判断了以后我就改变了背景的颜色,但是他的位置还是以前背景的那么大位置,上边显示的文字跟上边的按钮对不 最后调试了半天,只要把设置背景的代码都写带代码中ok