Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.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
C# WriteableBitmapEx GetPixel()返回错误的值_C#_Silverlight_Writeablebitmapex - Fatal编程技术网

C# WriteableBitmapEx GetPixel()返回错误的值

C# WriteableBitmapEx GetPixel()返回错误的值,c#,silverlight,writeablebitmapex,C#,Silverlight,Writeablebitmapex,我需要组合来自两个WriteableBitmap对象的两个颜色值,并用它们计算一些东西。因此,我在第一个对象上运行ForEach循环,并将其颜色值和第二个对象的颜色值解析为一个方法 writeableBitmap.ForEach((x, y, color) => MergePixelColor(color, mergedWriteableBitmap.GetPixel(x, y))); 我直接从委托获取的第一个值,但要访问第二个颜色值,我使用WriteableBitmap扩展中

我需要组合来自两个WriteableBitmap对象的两个颜色值,并用它们计算一些东西。因此,我在第一个对象上运行ForEach循环,并将其颜色值和第二个对象的颜色值解析为一个方法

writeableBitmap.ForEach((x, y, color) => 
    MergePixelColor(color, mergedWriteableBitmap.GetPixel(x, y)));
我直接从委托获取的第一个值,但要访问第二个颜色值,我使用WriteableBitmap扩展中的GetPixel方法

这实际上应该是这样的,但是GetPixel方法似乎返回了错误的数据(颜色不正确地表示为“黄色”或“红色”)

我查找并发现以下文章:

这里提到了图像格式可能有问题。我的问题是,我无法直接访问生成图像的点。我从一个Web服务中提取它们,但我不知道这部分是否可以修改(至少不能从我这里修改)


我现在的问题是,是否有其他方法或解决方法来解决此问题?你有什么想法吗?

这个解决方案可能只是一个解决办法,但在我给定的时间内,我想不出更好的办法。我只是预先循环mergedWriteableBitmap并将其颜色值保存到字典中:

IDictionary<int, Color> mergedWriteableBitmapMapping = new Dictionary<int, Color>();
mergedWriteableBitmap.ForEach((x, y, color) =>
{
    int index = GetIndex(x, y, mergedWriteableBitmap.PixelWidth);
    mergedWriteableBitmapMapping.Add(index, color);
    return color;
});

你确定这不仅仅是试图合并两种颜色的副作用吗?这是一门正确的科学,简单地将红、绿、蓝三种颜色结合起来通常并不好看。人眼具有非常非线性的颜色感知。是的,我确定,因为我测试了这个问题,排除了MergePixelColor方法中的所有功能。出于测试目的,我只是返回了放入方法中的颜色,第一个颜色值是正确的,第二个是错误的。它必须和从WriteableBitmap中提取数据的GetPixel方法有关。@ThomasMondel组件似乎有问题。(我已经为Silverlight使用了1.0.2版)。例如,如果我将矩形的填充颜色设置为#C3BCBC,则矩形的实际颜色为#C38F8F。我还没能仔细看一下,但也许在Writeablebitmapex Codeplex网站上发布你的担忧也是件坏事(如果你还没有这样做的话)。确保你使用的是WBX的最新源代码,而不是二进制版本。如果问题仍然存在,请在
writeableBitmap.ForEach((x, y, color) => 
    MergePixelColor(color, mergedWriteableBitmapMapping[GetIndex(x, y, mergedWriteableBitmap.PixelWidth)]));