zoukankan      html  css  js  c++  java
  • 团队博客

    滤镜

     private ImageView image_view;
    
        private SeekBar sb_alpha;
        private SeekBar sb_rad;
        private SeekBar sb_green;
        private SeekBar sb_blue;
    
        // 原图
        private Bitmap bitmap;
    
        private Canvas canvas;
        private Bitmap newBitmap; // 空白的新图
        private Paint paint;
    setContentView(R.layout.activity_meitu);
    
            image_view = findViewById(R.id.image_view);
    
            sb_alpha = findViewById(R.id.sb_alpha);
            sb_rad = findViewById(R.id.sb_rad);
            sb_green = findViewById(R.id.sb_green);
            sb_blue = findViewById(R.id.sb_blue);
    
            /**
             * 设置拖动条最大值
             */
            sb_alpha.setMax(SB_MAX);
            sb_rad.setMax(SB_MAX);
            sb_green.setMax(SB_MAX);
            sb_blue.setMax(SB_MAX);
    
            sb_alpha.setOnSeekBarChangeListener(seekBarChangeListener);
            sb_rad.setOnSeekBarChangeListener(seekBarChangeListener);
            sb_green.setOnSeekBarChangeListener(seekBarChangeListener);
            sb_blue.setOnSeekBarChangeListener(seekBarChangeListener);
     File file = new File(Environment.getExternalStorageDirectory(), "mm.jpg");
            if (!file.exists()) {
                Toast.makeText(this, file.getName() + "不存在", Toast.LENGTH_SHORT).show();
                return;
            }
    // 拿一块新的画布,把空白图片和画布关联
            canvas = new Canvas(newBitmap);
            // 设置画布的背景
            canvas.drawColor(Color.WHITE);
            // 拿一只新的画笔
            paint = new Paint();
     private final SeekBar.OnSeekBarChangeListener seekBarChangeListener = new SeekBar.OnSeekBarChangeListener() {
    
            float alpha = 1; // (0 ~ 1 就是变化的过程) 0就是透明  0.5就是半透明  1就是完全显示
            float rad = 1;
            float green = 1;
            float blue = 1;
    
            /**
             * 拖动条 拖动过程中,拖动的改变
             * @param seekBar
             * @param progress
             * @param fromUser
             */
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                switch (seekBar.getId()) {
                    case R.id.sb_alpha:
                        alpha = (float) (SB_MAX - progress) / SB_MAX;
                        Log.d(TAG, "progress:" + progress + " alpha:" + alpha);
                        break;
                    case R.id.sb_rad:
                        rad = (float) (SB_MAX - progress) / SB_MAX;
                        break;
                    case R.id.sb_green:
                        green = (float) (SB_MAX - progress) / SB_MAX;
                        break;
                    case R.id.sb_blue:
                        blue = (float) (SB_MAX - progress) / SB_MAX;
                        break;
                    default:
                        break;
    
                }
    
                /**
                 * ColorMatrix 做了一系列复杂的颜色值ragb运算
                 * 颜色值ragb运算,颜色矩阵是 5*4 的float数组
                 */
                ColorMatrix colorMatrix = new ColorMatrix();
    
                /**
                 * 以下这些值,是颜色矩阵的内部运算是需要这样的值,是这样排列的
                 * 0, 0, 0, 0, 0,  // 红色
                 * 0, 0, 0, 0, 0,  // 绿色
                 * 0, 0, 0, 0, 0,  // 蓝色
                 * 0, 0, 0, 0, 0,  // 透明的
                 *
                 * 以下这些值是让图片正常显示,是原图的效果 (0 ~ 1 就是变化的过程)
                 * 1, 0, 0, 0, 0,  // 红色
                 * 0, 1, 0, 0, 0,  // 绿色
                 * 0, 0, 1, 0, 0,  // 蓝色
                 * 0, 0, 0, 1, 0,  // 透明的
                 */
                colorMatrix.set(new float[]{
                        rad, 0, 0, 0, 0,  // 红色
                        0, green, 0, 0, 0,  // 绿色
                        0, 0, blue, 0, 0,  // 蓝色
                        0, 0, 0, alpha, 0,  // 透明的
                });
    
                /**
                 * 颜色矩阵-颜色过滤器,需要ColorMatrix
                 */
                ColorFilter colorFilter = new ColorMatrixColorFilter(colorMatrix);
    
                paint.setColorFilter(colorFilter);
    
                canvas.drawBitmap(bitmap, new Matrix(), paint);
    
             
                image_view.setImageBitmap(newBitmap);
            }

    权限

        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  • 相关阅读:
    JS内置对象-Array之splice-删插替
    for-in的缺点
    Obeject.hasOwnProperty
    JS中的深拷贝和浅拷贝
    函数中this的指向
    CSS预处理器之less和sass
    [转]javaweb学习总结(四十四)——监听器(Listener)学习
    [转]javaweb学习总结(四十三)——Filter高级开发
    [转]javaweb学习总结(四十二)——Filter(过滤器)学习
    [转]javaweb学习总结(四十一)——Apache的DBUtils框架学习
  • 原文地址:https://www.cnblogs.com/hfy717/p/14904782.html
Copyright © 2011-2022 走看看