El brillo de una imagen sigue aumentando incluso cuando se mueven la barra de desplazamiento de SeekBar a la izquierda.
-
21-12-2019 - |
Pregunta
En mi aplicación, quiero poder cambiar el brillo de una imagen dentro de una imagen. Yo uso la barra de búsqueda para este propósito. Cambia el brillo de la imagen cuando muevo la barra de desplazamiento a la derecha, pero cuando quiero reducir el brillo y moverme a la izquierda, el brillo sigue aumentando y la imagen se vuelve casi blanca. También es tan difícil de usar la barra de búsqueda como usuario. No se mueve muy suavemente. Puede alguien, por favor, ayúdame a mejorar mi código, ya que soy un principiante en la programación.
aquí es parte del código:
En Click de un botón "Filtro":
btn_filter.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.e("EditPhoto", "counter value = " + counter);
counter++;
sbarBrightness = (SeekBar) findViewById(R.id.seekBarForBrightness);
if (counter % 2 == 0) {
sbarBrightness.setVisibility(View.INVISIBLE);
} else {
sbarBrightness.setVisibility(View.VISIBLE);
}
sbarBrightness.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
int brightness;
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean
fromUser) {
brightness = progress;
imageBitmap = doBrightness(imageBitmap, brightness);
putGestureImageOnScreen(imageBitmap);
}
});
}
});
public static Bitmap doBrightness(Bitmap src, int value) {
Log.e("Brightness", "Changing brightnhjh");
int width = src.getWidth();
int height = src.getHeight();
Bitmap bmout = Bitmap.createBitmap(width, height, src.getConfig());
int A, R, G, B;
int pixel;
for (int i = 0; i < width; ++i) {
for (int j = 0; j < height; ++j) {
pixel = src.getPixel(i, j);
A = Color.alpha(pixel);
R = Color.red(pixel);
G = Color.green(pixel);
B = Color.blue(pixel);
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;
}
bmout.setPixel(i, j, Color.argb(A, R, G, B));
}
}
return bmout;
}
Declaración de BEAKBAR en el diseño:
<SeekBar
android:id="@+id/seekBarForBrightness"
android:layout_width="500dp"
android:layout_height="50dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
style="@style/tallerBarStyle"
android:layout_marginTop="64dp"
android:visibility="invisible" />
y este su estilo es el siguiente:
<style name="tallerBarStyle" parent="@android:style/Widget.SeekBar">
<item name="android:indeterminateOnly">false</item>
<item name="android:progressDrawable">@android:drawable/progress_horizontal</item>
<item
name="android:indeterminateDrawable">@android:drawable/progress_horizontal</item>
<item name="android:minHeight">8dip</item>
<item name="android:maxHeight">10dip</item>
</style>
También quiero salvar el nivel de brillo de la imagen de modo que cuando paso la imagen a otra actividad, la brigress no se pierde. ¿Puede alguien guiarme, cómo puedo lograrlo?
gracias.
Solución
El problema es causado por la manipulación en la misma referencia Bitmap
(imageBitmap = doBrightness(imageBitmap, brightness);
).Por lo tanto, cuando arrastra el control deslizante a la izquierda, todavía está aumentando continuamente el brillo a la imagen.
try
brightness = progress;
//imageBitmap = doBrightness(imageBitmap, brightness);
putGestureImageOnScreen(doBrightness(imageBitmap, brightness));
Para su segunda pregunta, puede usar Intent
para transferir el valor de brillo al próximo Activity
y hacer la manipulación de brillo una vez para obtener el mismo resultado.