`

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中画图并保存图片的详细解释。 首先,Bitmap是Android中表示图像的基本数据结构,它包含了像素信息。在画图前,你需要创建一个Bitmap对象,可以是空白的,也可以预先加载一张图片。如果你想要...

    Android 画图程序源码.rar

    - 如果图片或画布较大,可能需要异步加载和保存,以防止UI卡顿。这可能涉及到AsyncTask或者Loader的使用。 以上就是基于“Android 画图程序源码”可能涉及的一些核心技术点。通过分析这个源码,开发者可以学习到...

    Android Studio 电子签名、手绘画图保存

    总之,"Android Studio 电子签名、手绘画图保存"是一个结合了Android图形绘制和本地存储功能的实用案例。开发者可以通过学习和理解这个案例,提升自己在Android图形编程和文件操作方面的技能,这对于开发涉及用户...

    看代码学Android开发系列:android画图程序源代码

    本教程将通过分析提供的“android画图程序源代码”来深入理解Android图形绘制的基本概念和技术。 首先,Android提供了多种方式来绘制图形,主要包括Canvas、Paint、Path以及Bitmap等类。Canvas是绘画的基础,它提供...

    android画图板示例程序

    在Android平台上,开发一款画图板应用涉及到许多关键知识点,...综上所述,"android画图板示例程序"是一个涉及自定义View、Canvas绘图和触摸事件处理的项目,通过这些技术,开发者可以构建一个功能丰富的互动画图应用。

    android 画图集合.zip

    - "RecordDemo.zip"可能是一个记录用户画图操作的示例,它可能涉及到路径的保存和回放功能。 - "sample (1).zip"和"sample.zip"可能是两个不同的绘图示例,可能涵盖了更高级的特性,如颜色选择、画笔样式、手势...

    Android 画图代码和文档

    在`Android绘制折线图.doc`和`LineChart`这两个文件中,很可能会包含如何创建和配置折线图的详细步骤,包括数据的准备、渲染器的设置以及图表的显示和保存。这些文档可能还会提供示例代码,帮助开发者快速理解和应用...

    基于android系统的画图板

    5. **图片保存**:Android的`Bitmap`类用于表示位图图像,它可以用于保存用户在画图板上绘制的内容。我们可以将`Canvas`上的内容转换为`Bitmap`,然后利用`MediaStore.Images.Media.insertImage()`或`Bitmap....

    Android简单画图应用开发

    以上就是开发一个简单的Android画图应用所涉及的关键技术点,通过这些技术,我们可以创建一个功能丰富的画图工具,满足用户的基本需求。不过,实际开发过程中还需要考虑性能优化、用户体验等因素,以提供更优质的...

    android画图板

    本文将详细解析"android画图板"这个主题,介绍如何在Android中实现一个基本的画线功能,并探讨两种不同的实现方法。 首先,我们要了解Android中的画布(Canvas)和画笔(Paint)概念。Canvas是Android图形系统的一...

    安卓Android源码——画图程序源码.zip

    3. **保存和恢复画图状态**:`Canvas`提供了`save()`和`restore()`方法,用于保存和恢复绘图状态。这在需要进行复杂的变换或确保后续绘图不受影响时非常有用。 4. **路径绘图**:可能使用`Path`类来创建和管理多段...

    Android 画图工具源码.zip

    在画图工具中,`Bitmap`通常作为绘图的画布,可以使用`Canvas`在上面进行绘制,并通过`save`和`restore`方法来管理绘图状态,实现局部重绘或者保存当前绘图的状态。 此外,源码中可能还包括了触摸事件处理,例如`...

    android 画图 源码

    此外,为了实现一个完整的画图应用,还需要考虑其他功能,如撤销/重做、保存和分享图片、选择不同的画笔颜色和粗细、添加橡皮擦功能等。这些功能的实现会涉及更多的Android组件和数据结构,如ArrayList用于存储路径...

    android画图简单示例

    这个示例项目,名为“android画图简单示例”,旨在帮助开发者理解如何利用Android SDK中的相关API来创建这样一个交互式的图形界面。下面将详细阐述实现这些功能的关键知识点。 首先,我们关注的是画图功能。在...

    Android下使用Canvas画图

    本文将深入探讨Android中Canvas画图的相关知识点,帮助你理解和掌握其核心功能。 1. **Canvas的基本概念** - Canvas是Android系统提供的一个类,它提供了在二维画布上进行绘制的方法。 - 通常,我们会在一个...

    android 画图小例子

    "android 画图小例子" 涉及的是如何在Android环境中利用Canvas和相关API进行图形绘制。下面将详细介绍这个主题。 首先,Android中的画图主要通过`View`类的子类实现,特别是`SurfaceView`或自定义的`View`类。...

    Android画图工具源码.zip

    7. 数据存储与分享:为了让用户保存他们的作品,你需要实现将Bitmap转换为图片文件(如JPEG或PNG),并保存到本地或者上传到云端。同时,提供分享功能,允许用户通过社交应用分享他们的画作。 总之,这个"Android...

Global site tag (gtag.js) - Google Analytics