يستمر سطوع الصورة في الازدياد حتى عند تحريك شريط تمرير شريط البحث إلى اليسار
-
21-12-2019 - |
سؤال
في بلدي التطبيق ، أريد أن أكون قادرا على تغيير سطوع صورة داخل إيماجيفيو.يمكنني استخدام سيكبار لهذا الغرض.إنه يغير سطوع الصورة عندما أقوم بتحريك شريط التمرير إلى اليمين ولكن عندما أرغب في تقليل السطوع والتحرك إلى اليسار ، يستمر السطوع في الزيادة وتصبح الصورة بيضاء تقريبا.كما أنه من الصعب جدا استخدام شريط البحث كمستخدم.لا يتحرك بسلاسة كبيرة.هل يمكن لشخص ما مساعدتي في تحسين الكود الخاص بي لأنني مبتدئ في البرمجة.
هنا جزء من الكود:
على النقر على زر"تصفية" :
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
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>
أريد أيضا حفظ مستوى سطوع الصورة بحيث عندما أقوم بتمرير الصورة إلى نشاط آخر ، لا تضيع السطوع.يمكن للشخص يرجى توجيه لي ، كيف يمكنني تحقيق ذلك.
شكرا.
المحلول
سبب المشكلة هو القيام بالتلاعب على نفسه Bitmap
المرجع (imageBitmap = doBrightness(imageBitmap, brightness);
).ومن ثم ، عند سحب شريط التمرير إلى اليسار ، فإنك لا تزال تزيد باستمرار من سطوع الصورة.
حاول
brightness = progress;
//imageBitmap = doBrightness(imageBitmap, brightness);
putGestureImageOnScreen(doBrightness(imageBitmap, brightness));
لسؤالك 2 ، يمكنك استخدام Intent
لنقل قيمة السطوع إلى التالي Activity
والقيام التلاعب سطوع مرة واحدة للحصول على نفس النتيجة.