快速改变位图亮度

Changing bitmap brightness fast

我有两个大小为 1080 * 1080 和 3000 * 3000 的位图,我想更改位图的亮度,我成功了,但问题是我用搜索栏来做这个,它做了很多工作,它的大小超过 1080 * 1080 因为它是 3000 * 3000 位图。亮度变化很快,但有时连1080 * 1080的位图也会闪烁,但是60 * 60大小的位图亮度变化很快,

我的问题是如何像使用图像编辑器一样快速更改高维位图的亮度?

亮度代码link; Click to see the code

您有两种可能实现该目标:

推荐:

  1. 使用GPUImage for Android:

XML :

<jp.co.cyberagent.android.gpuimage.GPUImageView
    android:id="@+id/gpuimageview"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

JAVA :

private SeekBar seekBarBrightness;
private float brightnessOpacity = 50.0f;
private GPUImageView mGPUImageView;

     seekBarBrightness.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int i, boolean b) {

                brightnessOpacity = (float) i;
                mGPUImageView.setFilter(new GPUImageBrightnessFilter(range((int) brightnessOpacity , -0.5f, 0.5f));

            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });

   protected static float range(int percentage, float start, float end) {
        return (((end - start) * ((float) percentage)) / 100.0f) + start;
    }
  1. 使用您当前的代码:(如果图像太大,这将产生 内存不足异常

为防止延迟问题,将 onProgressChanged 方法中的代码替换为 onStopTrackingTouch 方法。

seekBarBrightness.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int i, boolean b) {

        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
              //YOUR CODE HERE
        }
    });