美文网首页
简单操作图片

简单操作图片

作者: dev晴天 | 来源:发表于2018-08-11 19:35 被阅读0次
      // 安卓是不允许在原图片上进行操作的 例如。
            bitmap.setPixel(20,30, Color.RED);
        /*   报错  Caused by: java.lang.IllegalStateException
        at android.graphics.Bitmap.setPixel(Bitmap.java:1394)*/
    
    
    创建副本 操作副本:
    
    
    
      @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            ivSrc = (ImageView) findViewById(R.id.iv_src);
            ivCopy = (ImageView) findViewById(R.id.iv_copy);
            // 1 先把图片转化为bitmap 显示再ivSrc上(getResources() 获得当前工程的资源)
            Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.linyun2);
            // 安卓是不允许在原图片上进行操作的 例如。
            //bitmap.setPixel(20,30, Color.RED);
            /*   报错  Caused by: java.lang.IllegalStateException
              at android.graphics.Bitmap.setPixel(Bitmap.java:1394)*/
            ivSrc.setImageBitmap(bitmap);
            /*2 创建原图的副本 (宽 高 配置 都一样)
              静态方法 的调用(此处创建的副本可以操作)
             返回Bitmap 对象 (通过此类BitmapFactory也会有多种方法创建Bitmap)
             相当于创建了和原图大小一样的白纸*/
           Bitmap copyBitmap= Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight()
                   ,bitmap.getConfig());
            // 作画 需要画笔
            Paint paint = new Paint();
            //画布   白纸铺到画布上
            Canvas canvas = new Canvas(copyBitmap);
            // 开始作画 (有很多方法 画圆形 矩形 bitmap)
            /* 参数  bitmap(参考的bitmap对象)  矩阵 (此处使用默认的矩阵)  画笔 */
            canvas.drawBitmap(bitmap,new Matrix(),paint);
            for (int i=0;i<200;i++){
                copyBitmap.setPixel(i+20,30,Color.RED);
            }
            ivCopy.setImageBitmap(copyBitmap);
    
    
        }
    
    
    
     /* 步骤 小结:     首先创建副本(Bitmap的静态方法    产生的时和原图片大小相同的白纸)
        *               声明画笔 画布
        *               白纸铺到画布上
        *               画布方法吊用  画和原位图一样的图
        *               通过画笔操作
        *               加载图片
        *               
        * */
    
    
    补充 只要是控件都有触摸事件
    
     ivCopy.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    int action = event.getAction();
                    switch (action){
                        case MotionEvent.ACTION_DOWN
                            break;
                    }
                    return false;//返回true表示事件处理完毕
                }
            });
    
    
    
    保存位图
    
    
       /* 保存图片:
             format 格式
             int quality 0-100  图片质量
             outputStream */
            FileOutputStream fos= null;
            // SystemClock.uptimeMillis() 当前手机开机时间 开机到现在运行了多长
            // file 的两个参数  路径  文件名
            File file = new File(getFilesDir().getAbsolutePath(), SystemClock.uptimeMillis()+"linyun2.JPEG");
            try {
                fos = new FileOutputStream(file);
                copyBitmap.compress(Bitmap.CompressFormat.JPEG,100,fos);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
    

    相关文章

      网友评论

          本文标题:简单操作图片

          本文链接:https://www.haomeiwen.com/subject/foadbftx.html