Die Helligkeit eines Bildes nimmt weiter zu, auch wenn die Bildlaufleiste der Suchleiste nach links verschoben wird
-
21-12-2019 - |
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.
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.
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.