3

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

writeableBitmap.ForEach((x, y, color) => 
    MergePixelColor(color, mergedWriteableBitmap.GetPixel(x, y)));

我直接从委托中获得第一个值,但要访问第二个颜色值,我使用 WriteableBitmap 扩展中的 GetPixel 方法。

这实际上应该像那样工作,但似乎 GetPixel 方法返回了错误的数据(颜色以某种方式错误地“黄色”或“红色”)。

我查了一下,发现下面的文章:

http://forums.silverlight.net/t/250392.aspx/1?WriteableBitmap+GetPixel+

那里提到图像格式可能存在问题。我的问题是虽然我无法直接访问生成图像的点。我从网络服务中提取它们,我不知道是否可以调整该部分(至少不能从我这里)。

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

4

1 回答 1

0

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

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;
});

之后我使用这个字典值将正确的颜色值解析为方法:

writeableBitmap.ForEach((x, y, color) => 
    MergePixelColor(color, mergedWriteableBitmapMapping[GetIndex(x, y, mergedWriteableBitmap.PixelWidth)]));
于 2012-08-16T06:11:02.257 回答