`

Android画图并保存图片

阅读更多
项目中遇到了一个图片合成的问题,搞很长时间也没搞定,最后使用Canvas和Bitmap解决了画图的问题。
 
Canvas是一个画布,你可以建立一个空白的画布,就直接new一个Canvas对象,不需要参数。
也可以先使用BitmapFactory创建一个Bitmap对象,作为新的Canvas对象的参数,也就是说这个画布不是空白的,
如果你想保存图片的话,最好是Bitmap是一个新的,而不是从某个文件中读入进来的,或者是Drawable对象。
 
然后使用Canvas画第一张图上去,在画第二张图上去,最后使用Canvas.save(int flag)的方法进行保存,注意save方法里面的参数可以保存单个图层,
如果是保存全部图层的 话使用 save( Canvas.ALL_SAVE_FLAG )。
 
最后所有的信息都会保存在第一个创建的Bitmap中。代码如下:
 /**
     * 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;
    }
 
 
 对图片进行缩小的方法:
 
 /**
     * 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;
    }
 
 

分享到:
评论
3 楼 myth2loki 2010-09-29  
bitmap有一个compress方法,可以往文件流里写数据
2 楼 wkwd001 2010-09-27  
代码里面提到的src是什么
1 楼 jn615 2010-08-16  
return resizedBitmap; 
之后呢?如何处理呀?我想知道怎么把newbit写回进文件夹下

相关推荐

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

    介绍了在Android中画图并保存图片的实例,以下是具体的实现方法,有需要的朋友可以参考一下

    基于android系统的画图板

    这是一个基于android系统的画图板,能实现线条颜色的选择,线条粗细的选择,能保存所花的图片,能清空画图板。

    支持画图并保存图片到本地功能

    支持画图并保存图片到本地功能,1、首先创建一个Bitmap图片,并指定大小;2、在该图片上创建一个新的画布Canvas,然后在画布上绘制,并保存即可;3、需要保存的目录File,注意如果写的目录如“/sdcard/song/”如果不...

    android画图板

    该项目为一个简单的android画图板,可将内容保存为图片,只能画线图

    Android 画图板实例

    3、保存,加载笔迹(Stroke)。 4、画笔颜色。 5、画板背景色。 6、画笔,橡皮大小。 7、选择画景图片。 说明:当时做的时候就按照WVGA800的模拟器做的,所以分辨率应当设置为800 * 480,横屏模式。

    Android应用源码基于android系统的画图板.zip

    Android应用源码基于android系统的画图板是一款基于android系统的画图板,主要功能是实现线条颜色的选择,线条粗细的选择,线条样式的选择,可以保存所画图片也可以清空图片,退出应用。代码量相对较少感兴趣的可以...

    Android应用源码基于android系统的画图板

    这是一款基于android系统的画图板,主要功能是实现线条颜色的选择,线条粗细的选择,线条样式的选择,可以保存所画图片也可以清空图片,退出应用。代码量相对较少感兴趣的可以看看,可以直接运用到自己的代码中。...

    最简单的surfaceview画图和截图

    最简单的surfaceview画图和截图,点击“点击加图”会在surfaceview上增加一个bitmat,点击“点击保存”会将最新的surfaceview图片保存在手机上。

    Android开发摄像头SurfaceView预览 背景画图(矩形和圆形) 实现(双surfaceview,顶层画矩形框,底层预览视频)

    Android开发摄像头SurfaceView预览 背景画图(矩形和圆形) 实现(双surfaceview,顶层画矩形框,底层预览视频); UI:三个按钮 预览 摄像 图片保存,预览界面 可以显示(矩形和圆形等图画)

    Android应用源码安卓绘图涂鸦终极版项目

    本项目是一套基于安卓的涂鸦程序项目源码,能够实现设置画笔(颜色,粗细,风格),撤销操作,回复操作,清除画面,选择背景,保存涂鸦图片到手机存储卡上等常见功能,适合各种写字和画图。二次开发可以美化一下UI和...

    Android基于Canvas,自定义View实现的简单画图工具

    1、实现了画直线、矩形、圆形、手绘线。 2、实现了橡皮擦功能,对图上的线段可以擦除。 3、画完的图形可以保存为jpg格式的图片

    Android游戏移植

    在手机游戏中程序要处理的主要有游戏界面(UI),按键,数据保存,游戏算法。游戏算法是用java语言...区别也不是很大,J2ME游戏移植到Android上主要要改的就是 画图,画文字,按键,数据保存的代码,其它的基本不用改。

    android电子签名,屏幕上手写签名

    就是在屏幕是用手写字,然后保存成图片,简称就是电子签名,可以用在手机上签合同,等技术。 使用技术: 使用了接口回调,绘制完成之后给用户去操作 自定义Dialog,在dialog上画图,给dialog设置主题,dialog的宽高...

    Android studio 画画板程序app毕业设计基于java的画板应用画删改色运行封面(包含源代码+设计报告+运行视频)

    用于Android studio课程设计之画画板的应用,通过简单代码实现画板的画画,擦除和改变画笔大小,使用java语言,在Android studio平台上进行开发,实现一个可以绘图的画板,界面有相关的选择按钮。可以根据按钮切换...

    android普通小画板

    一个小画板,可以打开系统里面的图片,也可以自己画图片到里面保存,又很多种颜色供选择。。。。。

    graffiti_Graffiti_android_源码

    基于安卓的涂鸦程序项目源码,能够实现设置画笔(颜色,粗细,风格),撤销操作,回复操作,清除画面,选择背景,保存涂鸦图片到手机存储卡上等常见功能,适合各种写字和画图。

Global site tag (gtag.js) - Google Analytics