本文实例讲述了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>
到这里就完了,看明白了吗?
希望本文所述对大家Android程序设计有所帮助。
本文地址:https://www.stayed.cn/item/23437
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我