4

你好

我正在尝试使用WritableBitmap.BackBuffer示例中使用的方法,请参阅示例部分。
我真正想做的是将一个写入一个指向int[]的空间。nativeint

为了能够从 int [] 写入一些内存,我从这个答案开始。 Microsoft.FSharp.NativeInterop.NativePtr.write似乎是一个很好的函数来写。

在尝试阅读了一下之后,出现了两个问题。

  1. WritableBitmap.BackBuffer有nativeint类型,怎么转换成nativeptrNativePter.write想要的?

  2. 好像一次只能写一个int,但我想写一个完整的int []

我承认我在深水中,但你学会游泳是在深水中:)

提前
致谢

4

2 回答 2

3

我认为该NativePtr.write函数一次只能用于写入单个值,因此如果要复制数组,则必须使用for循环。

一个更简单的选择可能是使用Marshal.Copy方法(参见 MSDN),该方法采用源数组(包含各种类型元素的数组有重载)并intptr作为目标。

像这样的东西应该工作:

let imageData = [| ... |] // generate one dimensional array with image data
writeableBitmap.Lock()

let buffer = writeableBitmap.BackBuffer
Marshal.Copy(imageData, 0, buffer, imageData.Length)
于 2010-11-22T15:19:20.177 回答
3

我认为托马斯建议的方法是有道理的。但是,要回答您的第一个问题,您可以使用该函数将 a 转换nativeint为 a 。nativeptrNativeInterop.NativePtr.ofNativeInt

于 2010-11-22T15:28:36.613 回答