我已经尝试了几个小时,但我无法解决这个问题。

我有一个USERCONTROL,即800x369,它仅包含形成世界图的路径。我将其放在景观页面上,然后将其渲染到可文字面。然后,我运行一个转换以将1D像素数组转换为2D整数数组。然后,要检查转换,我将自定义控件的单击命令接线以使用point.x and 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());
}

结果表明,与可写入的路径完全没有相关性。这条路径充满了固体白色。

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

有帮助吗?

解决方案

您的代码正常工作,Silverlight使用前型ARGB,因此对于透明,每个RGB值都会乘以0,最终结果将为0。对于白色,您获得了四个255字节,因为整数如何表示为-1 。您可以使用BitConverter类从INT获取字节,但我建议您建议 Writablebitmapex 它具有获取/set像素方法并为您处理前杂质。

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top