Domanda

Ciao

Sto cercando di utilizzare WritableBitmap.BackBuffer come usato in questo esempio , vedere gli esempi di sezione.
Quello che sto cercando di fare è davvero scrivere un int[] in uno spazio a punti nativeint a.

Per essere in grado di scrivere da int [] per qualche ricordo ho iniziato da questa risposta su SO. Microsoft.FSharp.NativeInterop.NativePtr.write sembra essere una funzione di buono da utilizzare per scrivere.

Dopo aver provato a leggere un po ' due domande si pone.

  1. WritableBitmap.BackBuffer ha il tipo nativeint, come convertire a nativeptr che NativePter.write vuole?

  2. Sembra che posso solo scrivere una int alla volta, ma voglio scrivere un intero int [].

Ammetto che io sono in acque profonde, ma è in acque profonde si impara a nuotare :)

Grazie in anticipo
Görgen

È stato utile?

Soluzione

Credo che la funzione NativePtr.write può essere utilizzata solo per scrivere il valore unico alla volta, quindi se si desidera copiare un array, si dovrà utilizzare un ciclo for.

Un'opzione più semplice potrebbe essere quella di utilizzare il metodo Marshal.Copy ( vedere MSDN ) che prende una matrice di origine (ci sono sovraccarichi per le matrici contenenti elementi di vario genere) e intptr come la destinazione.

Qualcosa del genere dovrebbe funzionare:

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

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

Altri suggerimenti

Credo che l'approccio suggerito di Tomas ha un senso. Tuttavia, per rispondere alla tua prima domanda, è possibile convertire un nativeint ad un nativeptr utilizzando la funzione NativeInterop.NativePtr.ofNativeInt.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top