Windows Phone アプリに画像があります。そこには、10個の値を含む配列があり、それらの値に応じて、コントラストを次のように設定しています
問題は、私が前に滑っているときは完璧です。しかし、画像を反転すると元の画像にはなりません。
私はすでに多くのことを試して研究しました
実はそのコードはコードプロジェクトサイトに属しています---
private double lastslidervalue;
private void sliderContrast_ValueChanged(object sender, MouseButtonEventArgs e)
{
if (sliderContrast == null) return;
double[] contrastArray = { 1, 1.2, 1.3, 1.6, 1.7, 1.9, 2.1, 2.4, 2.6, 2.9 };
int nIndex = (int)sliderContrast.Value-(int)this.lastslidervalue;
if (nIndex == -1)
{
int nIndex=this.lastslidervalue-sliderContrast.Value
this.lastslidervalue=sliderContrast.value
}
else
{
nIndex = (int)sliderContrast.Value-(int)this.lastslidervalue;
this.lastslidervalue=sliderContrast.value
}
double CFactor = contrastArray[nIndex];
WriteableBitmap wb;
wb = new WriteableBitmap(wbOriginal.PixelWidth, wbOriginal.PixelHeight);
//wb = new WriteableBitmap(imgOriginal);
wbOriginal.Pixels.CopyTo(wb.Pixels, 0);
int h = wb.PixelHeight;
int w = wb.PixelWidth;
for (int i = 0; i < wb.Pixels.Count(); i++)
{
int pixel = wb.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) Math.Max(0, Math.Min(255, (((R - 128) * CFactor) + 128)));
G = (int)Math.Max(0, Math.Min(255, (((G - 128) * CFactor) + 128)));
B = (int)Math.Max(0, Math.Min(255, (((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;
wb.Pixels[i] = B | (G << 8) | (R << 16) | (A << 24);
}
wb.Invalidate();
image1.Source = wb;
}
ここでは、スライダーの値変更イベントを使用しています....
デバッグ後、前方にスライドした後、R 値が継続的に減少していることがわかりました。ex--117,114,101,95 ですが、後方にスライドした後は R が増加するはずですが、95 の後は 76 のように減少し続けています.... 誰か助けてください........