En utilisant des pointeurs natifs en F # avec WriteableBitmap
-
27-09-2019 - |
Question
Bonjour
Je suis en train d'utiliser WritableBitmap.BackBuffer
tel qu'il est utilisé dans cette réponse sur le SO.
Microsoft.FSharp.NativeInterop.NativePtr.write
semble être une bonne fonction à utiliser pour écrire.
Après avoir essayé et la lecture d'un bit deux se pose des questions.
-
WritableBitmap.BackBuffer
a le type nativeint, comment convertir en nativeptr queNativePter.write
veut? -
Il semble que je ne peux écrire un
int
à un moment, mais je veux écrire unint []
entier.
Je reconnais que je suis en eau profonde, mais il est dans l'eau profonde que vous apprenez à nager :)
Merci à l'avance Gorgen
La solution
Je pense que la fonction NativePtr.write
peut être utilisé que pour écrire la valeur unique à la fois, donc si vous voulez copier un tableau, vous devrez utiliser une boucle de for
.
Une option plus facile peut être d'utiliser la méthode de Marshal.Copy
( voir MSDN ) qui prend un réseau de source (il y a des surcharges pour des tableaux contenant des éléments de divers types) et intptr
comme destination.
Quelque chose comme cela devrait fonctionner:
let imageData = [| ... |] // generate one dimensional array with image data
writeableBitmap.Lock()
let buffer = writeableBitmap.BackBuffer
Marshal.Copy(imageData, 0, buffer, imageData.Length)
Autres conseils
Je pense que l'approche proposée par Tomas est logique. Cependant, pour répondre à votre première question, vous pouvez convertir un nativeint
à un nativeptr
en utilisant la fonction NativeInterop.NativePtr.ofNativeInt
.