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.

  1. WritableBitmap.BackBuffer tem o tipo nativo, como converter para nativo que NativePter.write quer?

  2. Parece que só posso escrever um int de cada vez, mas eu quero escrever um todo int [].

Eu admito que estou em águas profundas, mas está nas águas profundas que você aprende a nadar :)

Agradeço antecipadamente
Gorgen

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top