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

  • 相关阅读:
    批量新增百万条数据 十百万条数据
    sqlserver 组内排序
    EF ++属性会更新实体
    Entity Framework Core: A second operation started on this context before a previous operation completed
    abp Cannot access a disposed object. A common cause of this error is disposing
    abp xunit Can not register IHostingEnvironment. It should be a non-abstract class. If not, it should be registered before.”
    hangfire enqueued but not processing(hangfire 定时任务入队列但不执行)
    EF 更新实体 The instance of entity type 'BabyEvent' cannot be tracked because another instance
    datatable to entiy list 不支持可空类型和枚举类型
    webapi 设置不显示接口到swaggerUI
  • 原文地址:https://www.cnblogs.com/loonggg/p/4981812.html
Copyright © 2011-2022 走看看