El brillo de una imagen sigue aumentando incluso cuando se mueven la barra de desplazamiento de SeekBar a la izquierda.

StackOverflow https://stackoverflow.com//questions/22030727

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. Así es como se ve cuando la barra de desplazamiento de la barra de búsqueda se movió a la derecha (para aumentar el brillo)  Así es como se ve cuando la barra de desplazamiento de la barra de búsqueda se movió a la izquierda (para disminuir el brillo)

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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top