Usando ponteiros nativos em f# com writitablebitmap
-
27-09-2019 - |
Pergunta
Olá
Estou tentando usar WritableBitmap.BackBuffer
como usado em este exemplo, veja os exemplos da seção.
O que estou tentando fazer realmente é escrever um int[]
em um espaço um nativeint
aponta para.
Ser capaz de escrever de int [] para alguma memória que eu comecei esta resposta SO.Microsoft.FSharp.NativeInterop.NativePtr.write
parece ser uma boa função a ser usada para escrever.
Depois de tentar e ler um pouco dois Perguntas surgem.
WritableBitmap.BackBuffer
tem o tipo nativo, como converter para nativo queNativePter.write
quer?Parece que só posso escrever um
int
de cada vez, mas eu quero escrever um todoint []
.
Eu admito que estou em águas profundas, mas está nas águas profundas que você aprende a nadar :)
Agradeço antecipadamente
Gorgen
Solução
Eu acho que o NativePtr.write
A função pode ser usada apenas para escrever um valor único por vez; portanto, se você quiser copiar uma matriz, terá que usar um for
ciclo.
Uma opção mais fácil pode ser usar o Marshal.Copy
método (Veja MSDN) que leva uma matriz de origem (existem sobrecargas para matrizes contendo elementos de vários tipos) e intptr
como destino.
Algo assim deve funcionar:
let imageData = [| ... |] // generate one dimensional array with image data
writeableBitmap.Lock()
let buffer = writeableBitmap.BackBuffer
Marshal.Copy(imageData, 0, buffer, imageData.Length)
Outras dicas
Eu acho que a abordagem sugerida por Tomas faz sentido. No entanto, para responder sua primeira pergunta, você pode converter um nativeint
para um nativeptr
usando o NativeInterop.NativePtr.ofNativeInt
função.