La luminosité d'une image ne cesse d'augmenter même lorsque vous vous déplacez Seekbar de la barre de défilement à gauche

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

Question

Dans mon application, je veux être en mesure de modifier la luminosité d'une image à l'intérieur d'une ImageView.J'utilise seekbar à cette fin.Il ne modifier la luminosité de l'image lorsque je déplace la barre de défilement à droite, mais quand je veux réduire la luminosité et le déplacer vers la gauche de la luminosité ne cesse d'augmenter et l'image devient presque blanc.Aussi, il est donc difficile d'utiliser la seekbar en tant qu'utilisateur.Il ne bouge pas très bien.Quelqu'un peut-il m'aider à améliorer mon code comme je suis un débutant en programmation.This is how it looks when scrollbar of seekbar moved right (to increase brightness).This is how it looks when scrollbar of seekbar moved left(to decrease brightness).

Voici une partie du code:

Sur clic d'un bouton "filtre" :

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;

}

Seekbar de la déclaration dans la mise en page:

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

et ce son style est comme ci-dessous:

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

Je tiens également à enregistrer le niveau de luminosité de l'image tels que lorsque je passe l'image à une autre activité, la brillance n'est pas perdu.Quelqu'un peut-il svp me guider, comment puis-je l'atteindre.

Merci.

Était-ce utile?

La solution

Le problème est causé par en faire la manipulation sur le même Bitmap référence (imageBitmap = doBrightness(imageBitmap, brightness);).Par conséquent, lorsque vous faites glisser le curseur vers la gauche, vous êtes toujours à la constante augmentation de la luminosité de l'image.

Essayez

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

Pour votre 2ème question, vous pouvez utiliser Intent pour le transfert de la valeur de luminosité à la prochaine Activity et faire de la luminosité de la manipulation une fois pour obtenir le même résultat.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top