WriteableBitmap失败严重,像素阵列非常不准确

时间:2011-01-16 22:42:11

标签: c# silverlight windows-phone-7 windows-phone writeablebitmap

我已经尝试了几个小时,而且我还没有能够解决这个问题。

我有一个UserControl,即800x369,它只包含一个形成世界地图的路径。 我把它放在一个横向页面上,然后我将它渲染成一个WriteableBitmap。 然后我运行转换将1d Pixels数组转换为2d整数数组。 然后,为了检查转换,我连接自定义控件的单击命令,以使用Point.X和Point.Y相对于新创建的数组中的自定义控件。 因此我的逻辑是:

wb = new WriteableBitmap(worldMap, new TranslateTransform());
wb.Invalidate();
intTest = wb.Pixels.To2DArray(wb.PixelWidth);

我的转换逻辑是这样的:

public static int[,] To2DArray(this int[] arr,int rowLength)
{
    int[,] output = new int[rowLength, arr.Length / rowLength];
    if (arr.Length % rowLength != 0) throw new IndexOutOfRangeException();
    for (int i = 0; i < arr.Length; i++)
    {
        output[i % rowLength, i / rowLength] = arr[i];
    }
return output;
}

现在,当我进行检查时,我得到了完全奇怪的结果:显然所有像素的值都是-1或0,而这些值 完全独立 原始色彩。

仅供后人使用:这是我的支票代码:

private void Check(object sender, MouseButtonEventArgs e)
{
    Point click = e.GetPosition(worldMap);
    ChangeNotification(intTest[(int)click.X,(int)click.Y].ToString());
}

结果显示与WriteableBitmap已呈现给它的路径完全没有关联。该路径有一个纯白色的填充。

到底发生了什么事?我已经试了好几个小时而没有运气。请问,这是阻止我提交第一个WP7应用程序的主要问题。有什么指导吗?

1 个答案:

答案 0 :(得分:1)

你的代码工作正常,Silverlight使用预乘的ARGB,所以为了透明,每个RGB值将乘以0,最终结果将为0.对于白色,你得到4个255字节,这是-1,因为如何整数代表。您可以使用BitConverter类从int获取字节,但我建议使用具有Get / SetPixel方法的WriteableBitmapEx并为您处理预乘。

如果您只是在寻找十六进制值:

ChangeNotification(intTest[(int)click.X,(int)click.Y].ToString("X8"));