【问题标题】:Android: Changing image contrast and brightness upon scrolling seekbarAndroid:滚动搜索栏时更改图像对比度和亮度
【发布时间】: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


    【解决方案1】:

    首先,在onProgressChanged 对比搜索栏的监听器中,你必须为搜索栏的亮度值设置-255

    为了将对比度的默认值放在中间,请执行以下代码:

        SeekBar_contrast.setMax(10);
        SeekBar_contrast.setProgress((5));
             @Override
             public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {  
                    if (progress <= 5) {
                        progress = 1 - progress / 5;                
                    } else {
                        progress = 1 + (progress / 10) * 9 
                    }
                    new_bm = changeBitmapContrastBrightness(bimap, (float)(progress-1),(float)SeekBar_brightness.getProgress() - 255);
                    cropImageView.setImageBitmap(new_bm);
             }
    

    如果你想增加对比度更平滑 - 尝试使用任何非线性函数。

    【讨论】:

    • 非常感谢您对线性按比例概念的指导。我计算出的公式应该是这样的:` public double convert_contrast_seekbar(int progress) { double new_contrast_progress = 0.0; if (progress
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多