La luminosità di un'immagine continua ad aumentare anche quando si sposta la barra di scorrimento di Seekbar a sinistra
-
21-12-2019 - |
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.
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.
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.