我已经尝试了几个小时,而且我还没有能够解决这个问题。
我有一个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应用程序的主要问题。有什么指导吗?
答案 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"));