zoukankan      html  css  js  c++  java
  • 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);
            }
        
    1、以专家为榜样,不必自己重新探索
    2、解构技能,找出实现80%效果的那20%
    3、不要一心二用
    4、练习练习再练习!然后获得即时反馈
    5、坚持,不要在低谷期放弃
  • 相关阅读:
    frameset框架中frame页面间传递参数
    程序中呼叫Class(类)
    ASP.NET简化编辑界面 V2
    ASP.NET简化编辑界面
    DropDownList与TextBox互动
    首先判断是否有选择记录,再confirm用户确认删除
    Div Vertical Menu ver2
    Div Vertical Menu
    为文本框指定一个默认值
    轻量级更换类(Class)
  • 原文地址:https://www.cnblogs.com/zhongyuan/p/4107883.html
Copyright © 2011-2022 走看看