SeekBar通过滑块位置来标识数值,且允许用户拖动滑块来改变值。下面利用三条SeeKBar来调整图片的色度(Hue)、饱和度(Saturation)、亮度(Lum)。

布局文件为一个ImageView,三条SeekBar,布局简单,在此省略。

首先创建一个图像处理类ImageHelper:

public class ImageHelper {

public static Bitmap handleImage(Bitmap bmp, float hue, float saturation, float lum){

Bitmap bm = Bitmap.createBitmap(bmp.getWidth(),bmp.getHeight(), Bitmap.Config.ARGB_8888);

Canvas canvas = new Canvas(bm);

Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);

ColorMatrix hueMatrix = new ColorMatrix();

hueMatrix.setRotate(0,hue);

hueMatrix.setRotate(1,hue);

hueMatrix.setRotate(2,hue);

ColorMatrix satMatrix = new ColorMatrix();

satMatrix.setSaturation(saturation);

ColorMatrix lumMatrix = new ColorMatrix();

lumMatrix.setScale(lum,lum,lum,1); //涓変釜閫氶亾鍜岄�忔槑搴�

ColorMatrix imgMatrix = new ColorMatrix(); //涓変釜ColorMatrix杩涜铻嶅悎

imgMatrix.postConcat(hueMatrix);

imgMatrix.postConcat(satMatrix);

imgMatrix.postConcat(lumMatrix);

paint.setColorFilter(new ColorMatrixColorFilter(imgMatrix));

canvas.drawBitmap(bmp,0,0,paint);

return bm;

}

}下面是MainActivity中的处理:

/**

* Created by dell on 2016/1/10.

*/

public class MainActivity extends Activity implements SeekBar.OnSeekBarChangeListener {

private TextView textView;

private SeekBar hue_bar, sat_bar, lum_bar;

private Button cancel_btn, ok_btn;

private ImageView hsl_img;

private static int MAX_VALUE = 255;

private static int MID_VALUE = 127;

private float mHue, mSaturation, mLum;

private Bitmap bitmap;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

initViews();

}

private void initViews() {

bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.lin);

textView = (TextView) findViewById(R.id.textView);

hue_bar = (SeekBar) findViewById(R.id.seekBar_h);

sat_bar = (SeekBar) findViewById(R.id.seekBar_s);

lum_bar = (SeekBar) findViewById(R.id.seekBar_l);

hsl_img = (ImageView) findViewById(R.id.hsl_img);

hue_bar.setOnSeekBarChangeListener(this);

sat_bar.setOnSeekBarChangeListener(this);

lum_bar.setOnSeekBarChangeListener(this);

hue_bar.setMax(MAX_VALUE); //设置最大值

sat_bar.setMax(MAX_VALUE);

lum_bar.setMax(MAX_VALUE);

hue_bar.setProgress(MID_VALUE); //设置初始值

sat_bar.setProgress(MID_VALUE);

lum_bar.setProgress(MID_VALUE);

hsl_img.setImageBitmap(bitmap);

}

@Override

public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {

switch (seekBar.getId()){

case R.id.seekBar_h:

mHue = (progress - MID_VALUE) * 1.0F / MID_VALUE * 180;

break;

case R.id.seekBar_s:

mSaturation = progress * 1.0F / MID_VALUE;

break;

case R.id.seekBar_l:

mLum = progress * 1.0F / MID_VALUE;

break;

}

hsl_img.setImageBitmap(ImageHelper.handleImage(bitmap,mHue,mSaturation,mLum));

}

@Override

public void onStartTrackingTouch(SeekBar seekBar) {

}

@Override

public void onStopTrackingTouch(SeekBar seekBar) {

}

}SeekBar需要绑定的是

setOnSeekBarChangeListener来实现对拖动位置的改变,里面有三个方法,主要需要重写的是

void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)progress代表监测到的当前滑动位置。

最后,附上实验效果,打开界面,并进行调节:

 

android 改变图像亮度,【Android】使用SeekBar调整图像的色度、饱和及度亮度相关推荐

  1. Android OpenCV之算数操作与调整图像的亮度和对比度

    Android OpenCV之算数操作与调整图像的亮度和对比度 OpenCV算数API介绍 Mat 对象之间的加.减.乘.除最常用的方法如下: add(Mat src1, Mat src2, Mat ...

  2. android 动态改变进度条,Android条纹进度条的实现(调整view宽度仿进度条)

    Android条纹进度条的实现(调整view宽度仿进度条) 发布时间:2020-10-03 16:14:24 来源:脚本之家 阅读:89 作者:RustFisher 前言 本文主要给大家介绍了关于An ...

  3. android改变整个app字体大小,Android APP字体随系统字体调整造成界面布局混乱问题解决方案...

    一.遇到的问题: 当用户调整系统字体大小的时候,APP的字体一般也都会跟随改变,进而导致某些界面布局排版混乱. 下面先说一下关于sp单位的理解 sp单位除了受屏幕密度影响外,还受到用户的字体大小影响, ...

  4. android seekbar 代码设置高度,Android - 如何更改默认的SeekBar厚度?

    Vaibhav Jani.. 30 你必须改变progressDrawable和thumb的SeekBar来调整它的厚度: android:id="@+id/seekBar" an ...

  5. 【Android 常见控件使用】ImageView(图像视图)

    文章目录 ImageView(图像视图) 本节引言 1.src属性和background属性的区别 1)写代码验证区别 2)解决blackground拉伸导致图片变形的方法 3)设置透明度的问题 4) ...

  6. Android学习笔记18-自定义Seekbar拖动条式样

    SeekBar拖动条可以由用户控制,进行拖动操作.比如,应用程序中用户需要对音量进行控制,就可以使用拖动条来实现. 1.SeekBar控件的使用 1.1SeekBar常用属性 SeekBar的常用属性 ...

  7. Android 控件学习--自定义SeekBar

    从sdk中可以得知,它是ProgressBar的扩展,它比进度条多了一个功能就是可拖动性,这样用户就可以控制进度条,比如播放电影,用户可以通过拖动SeekBar进行快进与快退.       要实现其拖 ...

  8. Android全局修改字体大小,Android 仿微信全局字体大小调整

    image 目录 一.前言 二.效果预览 三.实现步骤 1.自定义字体调整控件 2.滑动按钮改变当前页面预览字体大小 3.返回时,保存放大倍数并重启应用 4.初始化应用时配置字体放大倍数. 四.Dem ...

  9. Android香露刀之SeekBar之双管齐下

    传送门 ☞ Android兵器谱 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229 绿波香露刀          <天龙八部>乌老大:他一说完这番话 ...

最新文章

  1. 创建域名Linux服务器,linux 构建域名服务器
  2. numpy rollaxis理解
  3. 空间金字塔池化SPP
  4. 高科技的计算机作文600字,神奇的电脑_600字
  5. mybatis04--Mapper动态代理实现
  6. java标记错误_标记电子邮件Java时出错
  7. 计算机学报格式_参考文献格式的那些事儿
  8. ADO.NET数据集的工作原理(DataSet)
  9. 多元函数(multivariate function)分析(方向导数和梯度)
  10. React学习笔记 - 组件Props
  11. Android-LayoutInflater布局文件解析过程分析
  12. UG基本命令ug快捷键命令大全ug基本命令教程完整版
  13. python实现千图成像
  14. C++中Duration、Time_point和Clocks
  15. 075-数组越界异常-ArrayIndexOutOfBoundsException-【视频讲解】
  16. can协议crc计算_CAN总线通信的CRC校验方法
  17. drive登录不上 华为电脑one_Win10电脑中OneDrive无法登录如何解决
  18. 关于VS项目平台的x86,x64,Any CPU以及Debug和Release的区别
  19. iOS开发 - 获取网关IP,运营商,位置,可判断是在国内还是国外
  20. spinnaker-简介

热门文章

  1. 一个通用的Makefile
  2. 新华三助力公安构建新IT“警盾”
  3. 我的网页设计(腾讯网页面制作编写)
  4. Linux/UNIX不同shell环境下数组的处理
  5. butter滤波器是iir吗_如何快速设计应用一个IIR滤波器
  6. 安卓手机充电慢_苹果手机充电慢,耗电却很快?教你几个窍门,充得快电量更耐用...
  7. qcombobox 隐藏_Qt之QComboBox定制
  8. Java I/O之字节流与字符流的区别
  9. Starlink的20ms延迟怎么计算得到的?
  10. 卸载cuda_小白入门机器学习之环境配置——CUDA(Ubuntu16.04)