【问题标题】:Android a seekbar for adjusting bitmap brightnessAndroid 用于调整位图亮度的搜索栏
【发布时间】:2012-07-26 05:36:10
【问题描述】:

我尝试了许多代码,并查看了 Android 开发人员,但无法使其工作。我希望搜索栏调整我的位图图像亮度

【问题讨论】:

    标签: android image bitmap seekbar brightness


    【解决方案1】:

    查看Increase/Decrease Brightness of Image给出的示例

    并在搜索栏进度更改上执行如下所示

     int brightness;
     SeekBar seekbarbrightness=(SeekBar)findViewById(R.id.seekBar1);
     seekbarbrightness.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
    
             @Override
             public void onStopTrackingTouch(SeekBar arg0) {
              // TODO Auto-generated method stub
    
             }
    
             @Override
             public void onStartTrackingTouch(SeekBar arg0) {
              // TODO Auto-generated method stub
    
             }
    
             @Override
             public void onProgressChanged(SeekBar arg0, int progress, boolean arg2) {
    
                 // TODO Auto-generated method stub
    
                 brightness=progress;
                 Bitmap bitmap=doBrightness(originalbitmap,brightness);
                 imageView.setImageBitmap(bitmap);
             }
            });
    

    【讨论】:

    • ty ,但它在公共空白中给了我这个错误“新 OnSeekBarChangeListener(){} 类型的方法 onStopTrackingTouch(SeekBar) 必须覆盖超类方法”,我可以通过删除“ @override" ..
    • new SeekBar.OnSeekBarChangeListener(){} 类型的方法 onProgressChanged(SeekBar, int, boolean) 必须覆盖超类方法
    • @Khan 我尝试了您的解决方案,但是当我增加搜索栏时,该过程的执行速度非常缓慢,就好像应用程序被挂起一样。所以我想问您如何加快搜索栏的性能。如果您有任何解决方案我会很感激的。
    【解决方案2】:

    查看增加/减少图像亮度中给出的示例

         int brightness;
     SeekBar seekBarBrightness=(SeekBar)findViewById(R.id.seekBar1);
     seekBarBrightness.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
    
         @Override
         public void onStopTrackingTouch(SeekBar arg0) {
    
    
         }
    
         @Override
         public void onStartTrackingTouch(SeekBar arg0) {
    
    
         }
    
         @Override
         public void onProgressChanged(SeekBar arg0, int progress, boolean arg2) {
    
           Bitmap newBitMap  =   doBrightness(bitMap,progress);
    
           imageView.setImageBitmap(newBitMap);
    
         }
        });
    
    
    
    
        public static Bitmap doBrightness(Bitmap src, int value)
        {
            // image size
            int width = src.getWidth();
            int height = src.getHeight();
            // create output bitmap
            Bitmap bmOut = Bitmap.createBitmap(width, height, src.getConfig());
            // color information
            int A, R, G, B;
            int pixel;
    
            // scan through all pixels
            for (int x = 0; x < width; ++x)
                {
                    for (int y = 0; y < height; ++y)
                        {
                            // get pixel color
                            pixel = src.getPixel(x, y);
                            A = Color.alpha(pixel);
                            R = Color.red(pixel);
                            G = Color.green(pixel);
                            B = Color.blue(pixel);
    
                            // increase/decrease each channel
                            R += value;
                            if (R > 255)
                                {
                                    R = 255;
                                } else if (R < 0)
                                {
                                    R = 0;
                                }
    
                            G += value;
                            if (G > 255)
                                {
                                    G = 255;
                                } else if (G < 0)
                                {
                                    G = 0;
                                }
    
                            B += value;
                            if (B > 255)
                                {
                                    B = 255;
                                } else if (B < 0)
                                {
                                    B = 0;
                                }
    
                            // apply new pixel color to output bitmap
                            bmOut.setPixel(x, y, Color.argb(A, R, G, B));
                        }
                }
    
            // return final image
            return bmOut;
        }
    

    【讨论】:

    • 这个算法根本没有优化,新手机一张图片可能超过10mb,你不会实时看到变化
    • 它工作正常。但执行更改需要很长时间。
    【解决方案3】:

    使用这个例子

    SeekBar sb_value = (SeekBar) findViewById(R.id.sb_value);
            final ImageView im_brightness = (ImageView) findViewById(R.id.im_brightness);
            sb_value.setProgress(125);
            sb_value.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
                @Override
                public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
    
                    im_brightness.setColorFilter(setBrightness(progress));
    
                }
    
                @Override
                public void onStartTrackingTouch(SeekBar seekBar) {
    
                }
    
                @Override
                public void onStopTrackingTouch(SeekBar seekBar) {
    
                }
            });
    

    setBrightness 方法:

    public static PorterDuffColorFilter setBrightness(int progress) {
            if (progress >=    100)
            {
                int value = (int) (progress-100) * 255 / 100;
    
                return new PorterDuffColorFilter(Color.argb(value, 255, 255, 255), PorterDuff.Mode.SRC_OVER);
    
            }
            else
            {
                int value = (int) (100-progress) * 255 / 100;
                return new PorterDuffColorFilter(Color.argb(value, 0, 0, 0), PorterDuff.Mode.SRC_ATOP);
    
    
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多