Frage

In meiner App möchte ich die Helligkeit eines Bildes in einer Bildansicht ändern können.Ich benutze zu diesem Zweck die Suchleiste.Es ändert die Helligkeit des Bildes, wenn ich die Bildlaufleiste nach rechts bewege, aber wenn ich die Helligkeit verringern und nach links bewegen möchte, nimmt die Helligkeit weiter zu und das Bild wird fast weiß.Außerdem ist es so schwierig, die Suchleiste als Benutzer zu verwenden.Es bewegt sich nicht sehr reibungslos.Kann mir bitte jemand helfen, meinen Code zu verbessern, da ich Anfänger in der Programmierung bin.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).

Hier ist ein Teil des Codes:

Auf Knopfdruck "Filtern" :

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;

}

Deklaration der Suchleiste im 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" />

und das ist sein Stil wie folgt:

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

Außerdem möchte ich die Helligkeitsstufe des Bildes so speichern, dass die Helligkeit nicht verloren geht, wenn ich das Bild an eine andere Aktivität übergebe.Kann mir bitte jemand helfen, wie ich das erreichen kann.

Danke.

War es hilfreich?

Lösung

Das Problem wird durch Manipulationen an demselben verursacht Bitmap Referenz (imageBitmap = doBrightness(imageBitmap, brightness);).Wenn Sie also den Schieberegler nach links ziehen, erhöhen Sie die Helligkeit des Bildes kontinuierlich.

Versuchen

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

Für Ihre 2. Frage können Sie verwenden Intent um den Helligkeitswert zum nächsten zu übertragen Activity und führen Sie die Helligkeitsmanipulation einmal durch, um das gleiche Ergebnis zu erzielen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top