Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows phone 7 调整图像亮度_Windows Phone 7_C# 4.0 - Fatal编程技术网

Windows phone 7 调整图像亮度

Windows phone 7 调整图像亮度,windows-phone-7,c#-4.0,Windows Phone 7,C# 4.0,对于windows phone应用程序,当我通过滑块调整亮度时,当我 把它移到右边。但当我回到之前的位置时,图像不再变暗,而是变得越来越亮。这是我基于像素操作的代码 private void slider1\u值已更改(对象发送方,RoutedPropertyChangedEventArgs e) { wrBmp=新的可写位图(Image1,null); 对于(int i=0;i>=8; int G=(int)(像素&0xFF);像素>>=8; int R=(int)(像素&0xFF);像素>>

对于windows phone应用程序,当我通过滑块调整亮度时,当我 把它移到右边。但当我回到之前的位置时,图像不再变暗,而是变得越来越亮。这是我基于像素操作的代码

private void slider1\u值已更改(对象发送方,RoutedPropertyChangedEventArgs e)
{
wrBmp=新的可写位图(Image1,null);
对于(int i=0;i>=8;
int G=(int)(像素&0xFF);像素>>=8;
int R=(int)(像素&0xFF);像素>>=8;
int A=(int)(像素);
B+=(int)slider1.Value;R+=(int)slider1.Value;G+=(int)slider1.Value;
如果(R>255)R=255;如果(G>255)G=255;如果(B>255)B=255;
如果(R<0)R=0;如果(G<0)G=0;如果(B<0)B=0;
wrBmp.Pixels[i]=B |(G>=8;
int R=(int)(像素&0xFF);像素>>=8;
int A=(int)(像素);
R=(int)(((R-128)*CFactor)+128);
G=(int)((G-128)*CFactor)+128);
B=(int)((B-128)*CFactor)+128);
如果(R>255)R=255;如果(G>255)G=255;如果(B>255)B=255;
如果(R<0)R=0;如果(G<0)G=0;如果(B<0)B=0;

wrBmp.Pixels[i]=B |(G您的算法是错误的。每次滑块的值更改时,您都会将该值添加到图片的亮度中。使您的逻辑有缺陷的是,滑块返回的值始终为正值,并且您总是将亮度添加到相同的图片中

因此,如果滑块以值10开始,我将为图片的亮度增加10

然后,我滑到5。我将在前一张图片的
亮度上加5(你已经加了10的亮度)

解决这一问题的两种方法:

  • 保留原始图片的副本,并在每次调用方法时复制它。然后将亮度添加到副本(而不是原始图片)。这是最安全的方法

  • 计算相对值,而不是添加滑块的新绝对值(自上次调用该方法以来,相对值发生了多大变化):

    private double lastSliderValue;
    
    private void slider1_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
    {
        var offset = slider1.Value - this.lastSliderValue;
        this.lastSliderValue = slider1.Value;
    
        // Insert your old algorithm here, but replace occurences of "slider1.Value" by "offset"
    }
    
    私有双lastSliderValue;
    私有无效滑块1_值已更改(对象发送方,RoutedPropertyChangedEventArgs e)
    {
    var offset=slider1.Value—this.lastSliderValue;
    this.lastSliderValue=slider1.Value;
    //在此处插入旧算法,但将出现的“slider1.Value”替换为“offset”
    }
    
  • 不过,第二种方法可能会带来一些麻烦。您的算法将RGB值限制为255。在这种情况下,您将丢失信息,无法恢复到旧状态。例如,以滑块值255为例。该算法将所有像素设置为255,从而生成白色图片。然后减少sli将der设置为0,理论上应恢复原始图片。在这种情况下,每个像素减去255,但由于每个像素的值都是255,因此最终将得到黑色图片


    因此,除非你找到一个聪明的方法来解决第二个解决方案中提到的问题,否则我建议你使用第一个解决方案。

    嘿,库奇兹,我真的很感激,你考虑了我的qoestion,但由于其偏移量的逻辑,它不起作用。如果我们不指定任何值(平均位置)对于lastSliderValue,那么offset将等于slider1.value,那么为什么要声明offset,我们可以直接给出slider1.value。但是你已经说过我们必须给出相对值,这是正确的。现在我们已经分配了lastSliderValue。帮助………@bhupsiiii…我不确定你的观点是什么,但不管怎样,offset逻辑是有缺陷的我在结论中说了。改为使用第一个解决方案。嘿,kookiz,我已经研究了你的第一个解决方案。但这里我们还需要一个滑块,所以对于滑块值更改事件,我们为滑块1.value指定了什么值。经过研究,我发现,在移动一些+ve距离后,它会增加一些正值,在向后移动一点后,我再次发现t也是根据slider1.value添加的。因此,你能找到一个解决方案吗,我也在尝试…嘿,Kookiz,请告诉我如何知道slider在c#code中是向前还是向后移动。如果可以知道,那么这将是最好的解决方案。@bhupsiiii…这是我提供的代码示例。将slider的值与上一个:如果差值为正值,则差值增大;如果差值为负值,则差值减小。然后存储滑块的新值。如果始终向rgb值添加值,则它们将始终变亮。我不认为滑块值为负值?嘿,感谢您考虑这个问题,在xaml中,我设置了最大值和最小值滑块100和-100的imum。所以滑块中的thumd最初位于中间,所以它有负值向后滑动,但正如你说的,向前移动时,然后向后移动它没有任何正值。所以我已经知道这个问题。我需要你方的帮助,我如何通过滑块值来解决这个问题e初始值并将滑块值添加到这些值中。例如,保存原始图像的副本。由于没有人回复,我再次发布了这个问题,我真的需要一些帮助Hey nico,如何存储初始值。请给我一些相关代码
    private double lastSliderValue;
    
    private void slider1_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
    {
        var offset = slider1.Value - this.lastSliderValue;
        this.lastSliderValue = slider1.Value;
    
        // Insert your old algorithm here, but replace occurences of "slider1.Value" by "offset"
    }