Pergunta

No meu aplicativo, quero poder alterar o brilho de uma imagem em um ImageView.Eu uso o seekbar para essa finalidade.Ele altera o brilho da imagem quando movo a barra de rolagem para a direita, mas quando quero reduzir o brilho e mover para a esquerda, o brilho continua aumentando e a imagem fica quase branca.Além disso, é muito difícil usar a barra de busca como usuário.Não se move muito suavemente.Alguém pode me ajudar a melhorar meu código, pois sou iniciante em programação.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).

Aqui está parte do código:

Ao clicar em um botão "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;

}

Declaração do Seekbar no 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 este seu estilo é o seguinte:

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

Também quero salvar o nível de brilho da imagem de forma que quando eu passar a imagem para outra atividade, o brilho não seja perdido.Alguém pode me orientar, como posso conseguir isso.

Obrigado.

Foi útil?

Solução

O problema é causado pela manipulação do mesmo Bitmap referência (imageBitmap = doBrightness(imageBitmap, brightness);).Portanto, ao arrastar o controle deslizante para a esquerda, você ainda aumenta continuamente o brilho da imagem.

Tentar

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

Para sua segunda pergunta, você pode usar Intent para transferir o valor do brilho para o próximo Activity e faça a manipulação do brilho uma vez para obter o mesmo resultado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top