gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 18:06:37 26 4
gpt4 key购买 nike

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

我有一个 UserControl,它是 800x369,它只包含一条形成世界地图的路径。我将其放在横向页面上,然后将其呈现为 WriteableBitmap。然后我运行一个转换,将 1d 像素数组转换为 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 应用程序的主要问题。有什么指导吗?

最佳答案

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

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

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

关于c# - WriteableBitmap 严重失败,像素阵列非常不准确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4708592/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com