Для приложения Windows phone, когда я регулирую яркость с помощью слайдера, он отлично работает, когда я перемещаю его вправо. Но когда я возвращаюсь к предыдущей позиции, вместо потемнения изображения, она становится ярче и ярче. Вот мой код, основанный на манипуляциях с пикселями.Регулировка яркости изображения
private void slider1_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
wrBmp = new WriteableBitmap(Image1, null);
for (int i = 0; i < wrBmp.Pixels.Count(); i++)
{
int pixel = wrBmp.Pixels[i];
int B = (int)(pixel & 0xFF); pixel >>= 8;
int G = (int)(pixel & 0xFF); pixel >>= 8;
int R = (int)(pixel & 0xFF); pixel >>= 8;
int A = (int)(pixel);
B += (int)slider1.Value; R += (int)slider1.Value; G += (int)slider1.Value;
if (R > 255) R = 255; if (G > 255) G = 255; if (B > 255) B = 255;
if (R < 0) R = 0; if (G < 0) G = 0; if (B < 0) B = 0;
wrBmp.Pixels[i] = B | (G << 8) | (R << 16) | (A << 24);
}
wrBmp.Invalidate();
Image1.Source = wrBmp;
}
Что мне не хватает и есть какие-либо проблемы со значением ползунка. Я работаю с маленькими изображениями, как обычно, на мобильных телефонах. Я уже пытался копировать оригинальное изображение, чтобы его дублировать. Я думаю, что код прекрасен, после многих исследований я обнаружил, что проблема связана с значением ползунка. Возможное решение назначает начальное значение слайдеру. Мне нужна помощь с кодом.
частный двойной lastSlider3Vlaue; частная пустота slider3_ValueChanged (объект отправителя, `RoutedPropertyChangedEventArgs е) {
if (slider3 == null) return;
double[] contrastArray = { 1, 1.2, 1.3, 1.6, 1.7, 1.9, 2.1, 2.4, 2.6, 2.9 };
double CFactor = 0;
int nIndex = 0;
nIndex = (int)slider3.Value - (int)lastSlider3Vlaue;
if (nIndex < 0)
{
nIndex = (int)lastSlider3Vlaue - (int)slider3.Value;
this.lastSlider3Vlaue = slider3.Value;
CFactor = contrastArray[nIndex];
}
else
{
nIndex = (int)slider3.Value - (int)lastSlider3Vlaue;
this.lastSlider3Vlaue = slider3.Value;
CFactor = contrastArray[nIndex];
}
WriteableBitmap wbOriginal;
wbOriginal = new WriteableBitmap(Image1, null);
wrBmp = new WriteableBitmap(wbOriginal.PixelWidth, wbOriginal.PixelHeight);
wbOriginal.Pixels.CopyTo(wrBmp.Pixels, 0);
int h = wrBmp.PixelHeight;
int w = wrBmp.PixelWidth;
for (int i = 0; i < wrBmp.Pixels.Count(); i++)
{
int pixel = wrBmp.Pixels[i];
int B = (int)(pixel & 0xFF); pixel >>= 8;
int G = (int)(pixel & 0xFF); pixel >>= 8;
int R = (int)(pixel & 0xFF); pixel >>= 8;
int A = (int)(pixel);
R = (int)(((R - 128) * CFactor) + 128);
G = (int)(((G - 128) * CFactor) + 128);
B = (int)(((B - 128) * CFactor) + 128);
if (R > 255) R = 255; if (G > 255) G = 255; if (B > 255) B = 255;
if (R < 0) R = 0; if (G < 0) G = 0; if (B < 0) B = 0;
wrBmp.Pixels[i] = B | (G << 8) | (R << 16) | (A << 24);
}
wrBmp.Invalidate();
Image1.Source = wrBmp;
}
После отладки я обнаружил, что значения RGB уменьшаются непрерывно при скольжении вперед, но при скольжении назад она также уменьшается, где по мере того как он увеличивается. , пожалуйста, помогите iam, работая над этим с прошлых последних трех месяцев. Кроме того, вы также дадите мне совет о том, как я могу завершить всю обработку изображения.
кто-нибудь helppp .... –
Если вы всегда добавляете значение к значениям rgb, они всегда будут ярче. Я не думаю, что у вас есть отрицательные значения слайдера? –
эй, спасибо за рассмотрение этого вопроса, в xaml я установил максимальный и минимальный для слайдера 100 и -100 соответственно. Так что в слайдере сначала находится середина, поэтому он имеет отрицательное значение, которое он скользит назад, но, как и сказал, двигаясь вперед , то перемещение назад не имеет никакого положительного значения. Итак, я уже знаю эту проблему. Мне нужна помощь со стороны ура, так как я могу решить эту проблему с помощью значений ползунка –