【发布时间】:2015-02-25 01:50:11
【问题描述】:
我想设置图像视图的对比度和亮度。参考How to programmatically change contrast of a bitmap in android?,应该是最快最有效的方式,我实现代码如下:
代码:
final SeekBar SeekBar_contrast = (SeekBar) dialog_preview.findViewById(R.id.SeekBar_contrast);
final SeekBar SeekBar_brightness = (SeekBar) dialog_preview.findViewById(R.id.SeekBar_brightness);
SeekBar_contrast.setMax(10);
SeekBar_brightness.setMax(510);
SeekBar_contrast.setProgress((1));
SeekBar_brightness.setProgress((255));
SeekBar_contrast.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener()
{
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
{
new_bm = changeBitmapContrastBrightness(bimap, (float)(progress-1),(float)(SeekBar_brightness.getProgress()-255));
cropImageView.setImageBitmap(new_bm);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar)
{
}
@Override
public void onStopTrackingTouch(SeekBar seekBar)
{
}
});
SeekBar_brightness.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener()
{
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
{
new_bm = changeBitmapContrastBrightness(bimap, (float)(SeekBar_contrast.getProgress()-1), (float)(progress-255));
cropImageView.setImageBitmap(new_bm);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar)
{
}
@Override
public void onStopTrackingTouch(SeekBar seekBar)
{
}
});
方法:
public static Bitmap changeBitmapContrastBrightness(Bitmap bmp, float contrast, float brightness)
{
ColorMatrix cm = new ColorMatrix(new float[]
{
contrast, 0, 0, 0, brightness,
0, contrast, 0, 0, brightness,
0, 0, contrast, 0, brightness,
0, 0, 0, 1, 0
});
Bitmap ret = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(), bmp.getConfig());
Canvas canvas = new Canvas(ret);
Paint paint = new Paint();
paint.setColorFilter(new ColorMatrixColorFilter(cm));
canvas.drawBitmap(bmp, 0, 0, paint);
return ret;
}
参数如下:
@param bmp input bitmap
* @param contrast 0..10 1 is default
* @param brightness -255..255 0 is default
* @return new bitmap
问题:
虽然亮度默认值为 0,这是范围的中间值,因此滚动亮度搜索栏它工作得很好,我想问一下如何设置搜索栏最大值和对比度的进度变化,如默认值为 1,它不是范围的中间值。
在滚动 seekbar_contrast 时,上面的代码会使图像在进度 = 0 时显示“负色”,而向右滚动(较大的 seekbar 值)会产生白色图像。
【问题讨论】:
标签: android imageview brightness android-seekbar contrast