简单操作图片

2018-08-11  本文已影响0人  dev晴天
  // 安卓是不允许在原图片上进行操作的 例如。
        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();
        }
上一篇下一篇

猜你喜欢

热点阅读