Android 快速更改位图亮度

Android 快速更改位图亮度,android,bitmap,Android,Bitmap,我有两个1080*1080和3000*3000的位图,我想改变位图的亮度,我成功了,但问题是我用seekbar做了这件事,它做了很多工作,它的大小超过1080*1080,因为它是3000*3000位图。亮度变化很快,但有时甚至1080*1080位图也会闪烁,但60*60大小的位图的亮度变化非常快 我的问题是如何像使用图像编辑器一样快速更改高维位图的亮度 亮度编码链路 实现这一目标有两种可能: 推荐: <jp.co.cyberagent.android.gpuimage.GPUImageVi

我有两个1080*1080和3000*3000的位图,我想改变位图的亮度,我成功了,但问题是我用seekbar做了这件事,它做了很多工作,它的大小超过1080*1080,因为它是3000*3000位图。亮度变化很快,但有时甚至1080*1080位图也会闪烁,但60*60大小的位图的亮度变化非常快

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


亮度编码链路

实现这一目标有两种可能:

推荐:

<jp.co.cyberagent.android.gpuimage.GPUImageView
    android:id="@+id/gpuimageview"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
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;
    }
  • 使用
  • XML:

    <jp.co.cyberagent.android.gpuimage.GPUImageView
        android:id="@+id/gpuimageview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    
    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;
        }
    
  • 使用当前代码:(如果图像太大,则会产生内存不足异常
  • 为防止延迟问题,请将
    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
            }
        });
    

    非常感谢,这对我来说是一个非常重要的问题。我做了一些研究,但找不到你在网站上的用法,你能给我一个关于如何使用所有过滤器的链接吗?@Anonim抱歉,但你要求的是亮度,对,如果你想实现更多的过滤器,请问另一个问题,我很乐意帮你看看这个问题:()