WritablebitMap严重失败,像素阵列非常不准确
-
11-10-2019 - |
题
我已经尝试了几个小时,但我无法解决这个问题。
我有一个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"));
不隶属于 StackOverflow