zoukankan      html  css  js  c++  java
  • Android学习记录(10)—Android之图片颜色处理

    你想做到跟美图秀秀一样可以处理自己的照片,美化自己的照片吗?其实你也可以自己做一个这样的软件,废话不多说了,直接上图,上代码了!

    效果图如下:

    没处理前:

    处理之后:

    MainActivity.java的代码如下:

    package net.loonggg.test;
    
    import android.app.Activity;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.ColorMatrix;
    import android.graphics.ColorMatrixColorFilter;
    import android.graphics.Matrix;
    import android.graphics.Paint;
    import android.os.Bundle;
    import android.widget.ImageView;
    import android.widget.SeekBar;
    import android.widget.SeekBar.OnSeekBarChangeListener;
    
    public class MainActivity extends Activity {
    	private SeekBar sb1, sb2, sb3, sb4, sb5;
    	private ImageView iv;
    	private Bitmap bitmap, updateBitmap;
    	private Canvas canvas;
    	private Paint paint;
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		iv = (ImageView) findViewById(R.id.iv);
    		sb1 = (SeekBar) findViewById(R.id.sb1);
    		sb2 = (SeekBar) findViewById(R.id.sb2);
    		sb3 = (SeekBar) findViewById(R.id.sb3);
    		sb4 = (SeekBar) findViewById(R.id.sb4);
    		sb5 = (SeekBar) findViewById(R.id.sb5);
    
    		bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.b);
    
    		updateBitmap = Bitmap.createBitmap(bitmap.getWidth(),
    				bitmap.getHeight(), bitmap.getConfig());
    		canvas = new Canvas(updateBitmap);
    		paint = new Paint();
    		final ColorMatrix cm = new ColorMatrix();
    		paint.setColorFilter(new ColorMatrixColorFilter(cm));
    		paint.setColor(Color.BLACK);
    		paint.setAntiAlias(true);
    		final Matrix matrix = new Matrix();
    		canvas.drawBitmap(bitmap, matrix, paint);
    		iv.setImageBitmap(updateBitmap);
    
    		/**
    		 * RGB三原色 红色值的设置
    		 */
    		sb1.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
    
    			@Override
    			public void onStopTrackingTouch(SeekBar seekBar) {
    				int progress = seekBar.getProgress();
    				cm.set(new float[] { progress / 128f, 0, 0, 0, 0,// 红色值
    						0, 1, 0, 0, 0,// 绿色值
    						0, 0, 1, 0, 0,// 蓝色值
    						0, 0, 0, 1, 0 // 透明度
    				});
    				paint.setColorFilter(new ColorMatrixColorFilter(cm));
    				canvas.drawBitmap(bitmap, matrix, paint);
    				iv.setImageBitmap(updateBitmap);
    			}
    
    			@Override
    			public void onStartTrackingTouch(SeekBar seekBar) {
    
    			}
    
    			@Override
    			public void onProgressChanged(SeekBar seekBar, int progress,
    					boolean fromUser) {
    
    			}
    		});
    
    		/**
    		 * RGB三原色 绿色值的设置
    		 */
    		sb2.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
    
    			@Override
    			public void onStopTrackingTouch(SeekBar seekBar) {
    				int progress = seekBar.getProgress();
    				cm.set(new float[] { 1, 0, 0, 0, 0,// 红色值
    						0, progress / 128f, 0, 0, 0,// 绿色值
    						0, 0, 1, 0, 0,// 蓝色值
    						0, 0, 0, 1, 0 // 透明度
    				});
    				paint.setColorFilter(new ColorMatrixColorFilter(cm));
    				canvas.drawBitmap(bitmap, matrix, paint);
    				iv.setImageBitmap(updateBitmap);
    			}
    
    			@Override
    			public void onStartTrackingTouch(SeekBar seekBar) {
    
    			}
    
    			@Override
    			public void onProgressChanged(SeekBar seekBar, int progress,
    					boolean fromUser) {
    
    			}
    		});
    
    		/**
    		 * RGB三原色 蓝色值的设置
    		 */
    		sb3.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
    
    			@Override
    			public void onStopTrackingTouch(SeekBar seekBar) {
    				int progress = seekBar.getProgress();
    				cm.set(new float[] { 1, 0, 0, 0, 0,// 红色值
    						0, 1, 0, 0, 0,// 绿色值
    						0, 0, progress / 128f, 0, 0,// 蓝色值
    						0, 0, 0, 1, 0 // 透明度
    				});
    				paint.setColorFilter(new ColorMatrixColorFilter(cm));
    				canvas.drawBitmap(bitmap, matrix, paint);
    				iv.setImageBitmap(updateBitmap);
    			}
    
    			@Override
    			public void onStartTrackingTouch(SeekBar seekBar) {
    
    			}
    
    			@Override
    			public void onProgressChanged(SeekBar seekBar, int progress,
    					boolean fromUser) {
    
    			}
    		});
    
    		/**
    		 * RGB三原色 三个值都改变为设置饱和度(亮度)
    		 */
    		sb4.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
    
    			@Override
    			public void onStopTrackingTouch(SeekBar seekBar) {
    				int progress = seekBar.getProgress();
    				cm.set(new float[] { progress / 128f, 0, 0, 0, 0,// 红色值
    						0, progress / 128f, 0, 0, 0,// 绿色值
    						0, 0, progress / 128f, 0, 0,// 蓝色值
    						0, 0, 0, 1, 0 // 透明度
    				});
    				paint.setColorFilter(new ColorMatrixColorFilter(cm));
    				canvas.drawBitmap(bitmap, matrix, paint);
    				iv.setImageBitmap(updateBitmap);
    			}
    
    			@Override
    			public void onStartTrackingTouch(SeekBar seekBar) {
    
    			}
    
    			@Override
    			public void onProgressChanged(SeekBar seekBar, int progress,
    					boolean fromUser) {
    
    			}
    		});
    
    		/**
    		 * RGB三原色 设置透明度
    		 */
    		sb5.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
    
    			@Override
    			public void onStopTrackingTouch(SeekBar seekBar) {
    				int progress = seekBar.getProgress();
    				cm.set(new float[] { 1, 0, 0, 0, 0,// 红色值
    						0, 1, 0, 0, 0,// 绿色值
    						0, 0, 1, 0, 0,// 蓝色值
    						0, 0, 0, progress / 128f, 0 // 透明度
    				});
    				paint.setColorFilter(new ColorMatrixColorFilter(cm));
    				canvas.drawBitmap(bitmap, matrix, paint);
    				iv.setImageBitmap(updateBitmap);
    			}
    
    			@Override
    			public void onStartTrackingTouch(SeekBar seekBar) {
    
    			}
    
    			@Override
    			public void onProgressChanged(SeekBar seekBar, int progress,
    					boolean fromUser) {
    
    			}
    		});
    	}
    
    }
    
    布局文件代码如下:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#CDCDCD"
        android:orientation="vertical"
        tools:context=".MainActivity" >
    
        <ImageView
            android:id="@+id/iv"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />
    
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="center_vertical"
            android:orientation="horizontal"
            android:padding="10dp" >
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="红色:"
                android:textColor="#FF0000"
                android:textSize="24sp" />
    
            <SeekBar
                android:id="@+id/sb1"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:max="256"
                android:progress="128" />
        </LinearLayout>
    
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="center_vertical"
            android:orientation="horizontal"
            android:padding="10dp" >
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="绿色:"
                android:textColor="#00FF00"
                android:textSize="24sp" />
    
            <SeekBar
                android:id="@+id/sb2"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:max="256"
                android:progress="128" />
        </LinearLayout>
    
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="center_vertical"
            android:orientation="horizontal"
            android:padding="10dp" >
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="蓝色:"
                android:textColor="#0000FF"
                android:textSize="24sp" />
    
            <SeekBar
                android:id="@+id/sb3"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:max="256"
                android:progress="128" />
        </LinearLayout>
    
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="center_vertical"
            android:orientation="horizontal"
            android:padding="10dp" >
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="饱和度:"
                android:textColor="#000000"
                android:textSize="16.5sp" />
    
            <SeekBar
                android:id="@+id/sb4"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:max="256"
                android:progress="128" />
        </LinearLayout>
    
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="center_vertical"
            android:orientation="horizontal"
            android:padding="10dp" >
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="透明度:"
                android:textColor="#000000"
                android:textSize="16.5sp" />
    
            <SeekBar
                android:id="@+id/sb5"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:max="256"
                android:progress="128" />
        </LinearLayout>
    
    </LinearLayout>
    到这里就完了,看明白了吗?

    转载请注明出处:http://blog.csdn.net/loongggdroid/article/details/18708911

  • 相关阅读:
    深度学习文献代码阅读-超分辨(ESRGAN)
    缺陷检测-5.Learning to Detect Multiple Photographic Defects(学习去检测多种摄像缺陷)
    缺陷检测-4.Semi-supervised Anomaly Detection using AutoEncoders(半监督缺陷检测使用自动的编码器)
    缺陷检测-3.CutPaste: Self-Supervised Learning for Anomaly Detection and Localization(剪切粘贴:自监督学习对于异常检测和定位)
    缺陷检测-2.Mixed supervision for surface-defect detection: from weakly to fully supervised learning(对于表面缺陷检测的混合监督:从弱到完全监督学习)
    缺陷检测-1.End-to-end training of a two-stage neural network for defect detection(端到端的两步神经网络的缺陷检测)(论文和代码讲解)
    Mac Docker 中运行 Linux 0.12
    Sharding-JDBC 学习
    编译型语言&解释型语言
    vnc客户端远程登录无显示器Apple macOS 主机修改分辨率的方法
  • 原文地址:https://www.cnblogs.com/loonggg/p/4981812.html
Copyright © 2011-2022 走看看