2010-11-22 63 views
3

你好使用F#原生指針與WritableBitmap

我想使用WritableBitmap.BackBufferthis example使用,請參見範例。
我想要做的是將一個int[]寫入空間nativeint指向。

爲了能夠從int []寫入某些內存,我從SO上的this answer開始。 Microsoft.FSharp.NativeInterop.NativePtr.write似乎是一個很好用的函數來編寫。

嘗試和讀了一下後兩個問題出現。

  1. WritableBitmap.BackBuffer有型nativeint,如何轉換爲nativeptr是NativePter.write希望?

  2. 看來我一次只能寫一個int但我想寫一個整體int []

我承認我在深水中,但它是在深水你學會游泳:)

預先感謝
Gorgen

回答

3

我認爲NativePtr.write功能只能用於一次寫入單個值,因此如果要複製數組,則必須使用for循環。

一種更容易的選項可以是使用Marshal.Copy方法(see MSDN),接受一個源陣列(有用於容納各種類型的元件陣列重載)和intptr作爲目標。

像這樣的東西應該工作:

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

let buffer = writeableBitmap.BackBuffer 
Marshal.Copy(imageData, 0, buffer, imageData.Length) 
+0

工作得很好,謝謝 – Gorgen 2010-11-22 18:46:24

4

我認爲托馬斯的建議做法是有道理的。但是,要回答您的第一個問題,可以使用NativeInterop.NativePtr.ofNativeInt函數將nativeint轉換爲nativeptr

+0

即使我用托馬斯的方法去了解它是很好的.... – Gorgen 2010-11-22 18:47:37