Яркость изображения продолжает расти даже при движении просмотра Seekbar.

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

Вопрос

В моем приложении я хочу иметь возможность изменить яркость изображения в ImageView. Я использую Seekbar для этой цели. Он изменяет яркость изображения, когда я перемещаю прокрутку правильно, но когда я хочу уменьшить яркость и переместить влево, яркость продолжает увеличиваться, а изображение становится почти белым. Также так сложно использовать Seekbar в качестве пользователя. Это не двигается очень гладко. Может кто-нибудь, пожалуйста, помогите мне улучшить свой код, так как я начинающий в программировании. Вот как он выглядит, когда прокрутка Seekbar переместила правильно (чтобы увеличить яркость).  Вот как он выглядит, когда прокрутка Seekbar переместилась налево (уменьшить яркость).

Вот часть кода:

Нажмите кнопку «Фильтр»:

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 в макете:

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

И это его стиль как ниже:

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

Также я хочу сохранить уровень яркости изображения такого, что когда я передаю изображение другому действию, Бредность не потеряна. Может кто-нибудь, пожалуйста, просидите меня, как я могу добиться этого.

спасибо.

Это было полезно?

Решение

Проблема вызвана выполнением манипулирования на том же этаре генеракодицетагкода (генеракодицетагкод).Следовательно, когда вы перетащите ползунок влево, вы все еще постоянно увеличиваете яркость на изображение.

попробуйте

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

Для вашего второго вопроса вы можете использовать Bitmap для передачи значения яркости на следующий imageBitmap = doBrightness(imageBitmap, brightness); и выполнять манипулирование яркостью один раз, чтобы получить тот же результат.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top