我有两个大小分别为1080*1080和3000*3000的位图,我想更改位图的亮度,我成功了,但问题是我用搜索栏做了这件事,它做了很多工作,它的大小超过1080*1080,因为它是3000*3000位图。亮度变化很快,但有时甚至1080*1080位图也会闪烁,但60*60大小的位图亮度变化非常快,
我的问题是,如何像使用图像编辑器一样快速更改高维位图的亮度?
亮度代码链接;点击查看代码
实现这一点有两种可能性:
推荐:
- 在Android上使用GPUImage:
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;
}
- 使用当前代码:(如果图像太大,这将产生内存不足异常(
为了防止滞后问题,请将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
}
});