【问题标题】:image manipulation windows phone图像处理 windows phone
【发布时间】:2013-06-13 00:53:12
【问题描述】:

我在 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.... 请帮助任何人......

【问题讨论】:

  • 你有你正在做什么以及它是如何不工作的示例代码吗?
  • @Deeko---这是我的示例代码...
  • 我的滑块最大值是 9,最小值是 0
  • @Deeko--你在哪里,帮帮我,我正在尝试这个很长时间

标签: windows-phone-7 c#-4.0


【解决方案1】:

您的 contrastArray 只有正值。当您将滑块向后移动时,您总是在对对比度进行积极的更改,或者让您的应用崩溃。

double[] contrastArray = { 1, 1.2, 1.3, 1.6, 1.7, 1.9, 2.1, 2.4, 2.6, 2.9 };

这都大于 1。

此外,这可能会使您的应用崩溃:

int nIndex = (int)sliderContrast.Value-(int)this.lastslidervalue;
this.lastslidervalue=sliderContrast.value
if (nIndex == -1) return;

因为有时负面的变化可能大于 1。这意味着你得到的 nIndex 小于 -1 然后在这里崩溃:

double CFactor = contrastArray[nIndex];

但是,您可以使用此代码来获得所需的内容

private void sliderContrast_ValueChanged(object sender,     RoutedPropertyChangedEventArgs<double> e)
{
    if (sliderContrast == null) return;
    double[] contrastArray = { 0.1, 0.2, 0.3, 0.4, 0.6, 1, 1.2, 1.3, 1.6, 1.7, 1.9, 2.1, 2.4, 2.6, 2.9};
    int nIndex = Convert.ToInt32(sliderContrast.Value);

    double CFactor = contrastArray[nIndex];
    //.... the rest is the same

如果您将滑块的起始值设置为 Value = 5(在 XAML 中执行此操作)并让最大值稍大一些(以扩展添加的值),则向右和向left 应该根据滑块值获得更高或更低的对比度。在我的机器上工作。 :)

【讨论】:

  • 不工作的兄弟...这里我使用值更改事件,而不是鼠标左键向上事件,所以我必须减去滑块值,最初你说没有负值,你在哪里-ve 代码中的值
  • 不管你用什么。 value changed 事件发生,你取当前值。当我说负值时,我指的是对比意义上的负值 - 介于 0 和 1 之间。
  • 我已经尝试过你的代码,但现在它在向前滑动时也不起作用。
  • @Igrali ..嘿兄弟,你说得很好,我必须应用负值,但我已经使用了你的代码但它不起作用,所以请告诉我如何应用负值,无论我有向后滑动时在代码中间更改 r g b 的逻辑。如果是然后告诉相反的情况,我的意思是 R = (int) Math.Max(0, Math.Min(255, (((R - 128) * CF 因子) + 128)));
猜你喜欢
  • 1970-01-01
  • 2012-05-09
  • 2015-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多