La luminosità di un'immagine continua ad aumentare anche quando si sposta la barra di scorrimento di Seekbar a sinistra

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

Domanda

Nella mia app, voglio essere in grado di cambiare la luminosità di un'immagine all'interno di un imageview. Io uso SearkBar per questo scopo. Cambia la luminosità dell'immagine quando muovo la barra di scorrimento a destra ma quando voglio ridurre la luminosità e muovermi a sinistra la luminosità continua a crescere e l'immagine diventa quasi bianca. Inoltre è così difficile da usare il Seekbar come utente. Non si muove molto senza intoppi. Qualcuno può aiutarmi a aiutarmi a migliorare il mio codice mentre sono un principiante nella programmazione. Questo è il modo in cui guarda quando scrollbar di Seekbar spostato a destra (per aumentare la luminosità).  È così che sembra quando Scrollbar di Seekbar si è spostata a sinistra (per diminuire la luminosità).

Ecco parte del codice:

On Click del pulsante "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;

}
.

Dichiarazione di Seekbar nel layout:

<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" />
.

E questo è il suo stile come di seguito:

<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>
.

Voglio anche salvare il livello di luminosità dell'immagine tale che quando passo l'immagine ad un'altra attività, la birra non è persa. Qualcuno può per favore guidarmi, come posso ottenerlo.

Grazie.

È stato utile?

Soluzione

Il problema è causato facendo la manipolazione sullo stesso riferimento Bitmap (imageBitmap = doBrightness(imageBitmap, brightness);).Quindi, quando trascini il cursore verso sinistra, stai ancora aumentando continuamente la luminosità sull'immagine.

Prova

brightness = progress;
//imageBitmap = doBrightness(imageBitmap, brightness);
putGestureImageOnScreen(doBrightness(imageBitmap, brightness));
.

Per la seconda domanda, è possibile utilizzare Intent per trasferire il valore di luminosità su Activity successivo e eseguire la manipolazione della luminosità una volta per ottenere lo stesso risultato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top