android+ canvas绘图后保存图片

canvas绘图后保存图片,分两种情况,一种:自己new一个canvas对象。 第二种:在onDraw函数作为参数引入Canvas

第一种情况:

  建一个空的bitmap对象,然后在初始化画布时,把它作为参数带入,之后canvas所做的绘图操作,都是在该bitmap上,只要保存该bitmap对象即可。如下代码:画一个蓝色的圆环:

            //这边直接用canvas画,然后保存
            Bitmap bitmap = Bitmap.createBitmap(700,700, Bitmap.Config.ARGB_8888);
            Canvas canvas = new Canvas(bitmap);
            canvas.drawColor(Color.WHITE);

            Paint paint = new Paint();
            paint.setAntiAlias(true);//设置抗锯齿
            paint.setStrokeWidth(7);//设置笔触宽度
            paint.setStyle(Paint.Style.STROKE);

            //画奥运五环
            paint.setColor(Color.BLUE);
            canvas.drawCircle(150,150,100,paint); //绘制蓝色圆环

            canvas.save(Canvas.ALL_SAVE_FLAG); //保存
            canvas.restore(); // 存储

            File sdRoot = Environment.getExternalStorageDirectory();
            String save_path = sdRoot.getAbsolutePath() + "/DCIM/100MEDIA/114.jpg";
            try {
                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, new FileOutputStream(new File(save_path)));
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }

第二种情况:

  重点就是setDrawingCacheEnabled(true); 和 getDrawingCache()这两个函数

        public MyView(Context context) {
            super(context);
            //这函数是要打开图形缓存,这样才能getDrawingCache
            setDrawingCacheEnabled(true);
        }
        protected void onDraw(Canvas canvas){
            canvas.drawColor(Color.WHITE);

            Paint paint = new Paint();
            paint.setAntiAlias(true);//设置抗锯齿
            paint.setStrokeWidth(7);//设置笔触宽度
            paint.setStyle(Paint.Style.STROKE);

            //画一个环
            paint.setColor(Color.BLUE);
            canvas.drawCircle(150,150,100,paint); //绘制蓝色圆环

            canvas.save(Canvas.ALL_SAVE_FLAG); //保存
            canvas.restore(); // 存储

            //将canvas里的draw保存下来
            File sdRoot = Environment.getExternalStorageDirectory();
            String save_path = sdRoot.getAbsolutePath() + "/DCIM/100MEDIA/113.jpg";

            try {
                getDrawingCache().compress(Bitmap.CompressFormat.JPEG, 100, new FileOutputStream(new File(save_path)));

            } catch (Exception e) {
                Log.e("Error--------->", e.toString());
            }
            super.onDraw(canvas);
        }
    
时间: 2024-08-29 13:20:31

android+ canvas绘图后保存图片的相关文章

【转】Android Canvas绘图详解(图文)

转自:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1212/703.html Android Canvas绘图详解(图文) 泡在网上的日子 发表于 2012-12-12 20:29 第 63165 次阅读 Canvas,android 15 Android中使用图形处理引擎,2D部分是android SDK内部自己提供,3D部分是用Open GL ES 1.0.今天我们主要要了解的是2D相关的,如果你想看3D的话那么可以跳

android Canvas 绘图系列(一)

首先解释一下:Canvas.Paint .Rect. Canvas绘图有三个要点(你完全可以开一下脑洞): 1.Canvas画布,就像是我们画画用的纸.图形绘制在Canvas画布之上. 2.Paint画笔,就像现实中的画笔一样,可以设置颜色,字体,透明度等. 3.Rect绘画路径,用于绘制不同形状如:矩形.椭圆形等. 这里主要讲述的是View中的onDraw 中的canvas参数,至于画板之类的暂且不提. 在自定义控件中常重写父类onDraw改变view的属性. view源码中的onDraw方法

Android Canvas绘图详解(图文) - 泡在网上的日子

body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI",Tahoma,Helvetica,Sans-Serif,"Microsoft YaHei", Georgia,Helvetica,Arial,sans-serif,宋体, PMingLiU,serif; font-size: 10.5pt; line-height: 1.5;

Android Canvas绘图详解(图文)

编辑推荐:稀土掘金,这是一个针对技术开发者的一个应用,你可以在掘金上获取最新最优质的技术干货,不仅仅是Android知识.前端.后端以至于产品和设计都有涉猎,想成为全栈工程师的朋友不要错过! Android中使用图形处理引擎,2D部分是android SDK内部自己提供,3D部分是用Open GL ES 1.0.今天我们主要要了解的是2D相关的,如果你想看3D的话那么可以跳过这篇文章. 大 部分2D使用的api都在android.graphics和android.graphics.drawabl

android Canvas 绘图系列(二)

这里主要讲Paint 画笔.还是搬运和翻译官方文档吧. 1.setAlpha(int a)  设置透明度,参数范围是0-255. 如需要设置改属性:建议改成(0-1),然后乘以255. 2.setColor(int color) 设置画笔颜色其中包含透明度,参数为 0xff777777类型,0x是16进制标识,后两个ff是表示透明度,后六位是颜色值 3.setARGB(int a, int r, int g, int b) 设置rgb颜色值和透明度; 第一个参数为透明度; 第二个为red色值;

Android中Canvas绘图之Shader使用图文详解

概述 我们在用Android中的Canvas绘制各种图形时,可以通过Paint.setShader(shader)方法为画笔Paint设置shader,这样就可以绘制出多彩的图形.那么Shader是什么呢?做过GPU绘图的同学应该都知道这个词汇,Shader就是着色器的意思.我们可以这样理解,Canvas中的各种drawXXX方法定义了图形的形状,画笔中的Shader则定义了图形的着色.外观,二者结合到一起就决定了最终Canvas绘制的被色彩填充的图形的样子. 类android.graphics

Android中Canvas绘图之PorterDuffXfermode使用及工作原理详解

概述 类android.graphics.PorterDuffXfermode继承自android.graphics.Xfermode.在用Android中的Canvas进行绘图时,可以通过使用PorterDuffXfermode将所绘制的图形的像素与Canvas中对应位置的像素按照一定规则进行混合,形成新的像素值,从而更新Canvas中最终的像素颜色值,这样会创建很多有趣的效果.当使用PorterDuffXfermode时,需要将将其作为参数传给Paint.setXfermode(Xfermo

Android中Canvas绘图基础详解(附源码下载)

Android中,如果我们想绘制复杂的自定义View或游戏,我们就需要熟悉绘图API.Android通过Canvas类暴露了很多drawXXX方法,我们可以通过这些方法绘制各种各样的图形.Canvas绘图有三个基本要素:Canvas.绘图坐标系以及Paint.Canvas是画布,我们通过Canvas的各种drawXXX方法将图形绘制到Canvas上面,在drawXXX方法中我们需要传入要绘制的图形的坐标形状,还要传入一个画笔Paint.drawXXX方法以及传入其中的坐标决定了要绘制的图形的形状

Android中Canvas绘图基础详解

原文:http://blog.csdn.net/iispring/article/details/49770651 Android中,如果我们想绘制复杂的自定义View或游戏,我们就需要熟悉绘图API.Android通过Canvas类暴露了很多drawXXX方法,我们可以通过这些方法绘制各种各样的图形.Canvas绘图有三个基本要素:Canvas.绘图坐标系以及Paint.Canvas是画布,我们通过Canvas的各种drawXXX方法将图形绘制到Canvas上面,在drawXXX方法中我们需要