Sto cercando di trovare un modo efficiente per passare un buffer di dati di immagine a un componente di Windows Runtime su Windows Telefono 8, riducendo al minimo il numero di volte in cui i dati del buffer necessitano da copiare. Una simile, ma più in generale, domanda è stata fatta prima:Passaggio di buffer di dati immagine a Windows Runtime su Windows Phone 8
Vedi Passing images from Windows (Phone) Runtime Components (c++/cx) to Native c++ Algorithms
Sfondo
Un articolo di MSDN sul tema può essere trovato here. Suggerisce di utilizzare un WriteableBitmap
che può esporre il buffer di pixel sottostante come un oggetto IBuffer
, che consente al componente nativo di manipolare i dati sul posto senza prima copiare il buffer.
Vedi How to get access to WriteableBitmap.PixelBuffer pixels with C++?
Tuttavia, il Windows.UI.Xaml.Media.Imaging
spazio dei nomi che la WriteableBitmap
fa parte non è disponibile per Windows Phone 8, solo Windows 8. Invece si può usare System.Windows.Media.Imaging.WriteableBitmap
, ma dà solo l'accesso ai dati di immagine dei pixel in la forma di un int []. Un modo di convertire l'accaduto a un IBuffer
è:
using System.Windows.Media.Imaging;
using System.Runtime.InteropServices.WindowsRuntime;
private static IBuffer AsBuffer(WriteableBitmap bitmap)
{
int[] p = bitmap.Pixels;
int len = p.Length * 4;
byte[] arr = new byte[len];
Buffer.BlockCopy(p, 0, arr, 0, len);
return arr.AsBuffer(); // Part of System.Runtime.InteropServices.WindowsRuntime
}
ma comporta la copia inutile del buffer.
D'altro canto, il passaggio di matrici di byte di dati presenta i suoi svantaggi secondo questo MSDN article. Fondamentalmente, in Windows Runtime, i parametri sono o per l'input o per l'output, mai entrambi, il che significa che alla fine è necessaria una copia.
risposta ricercata
- Come faccio a passare i dati in modo efficiente immagine attraverso lo strato di Windows Runtime?
- Quali classi RT sono adatte al passaggio di immagini e al passaggio di flussi video? Array semplici o buffer più complessi?
hai risolto? – tfzxyinhao
Solo una FYI, 'Windows.UI.Xaml.Media.Imaging.WriteableBitmap' è disponibile in Windows Phone 8.1 – gannaway