2010-10-07 13 views
12

Sto cercando di ottenere i dati dei pixel da un oggetto WPF BitmapSource. Come ho capito, questo può essere ottenuto chiamando il suo metodo CopyPixels. Questo metodo richiede un parametro di passo, che non so come ottenere. Per quanto ne so, il passo è il valore che viene usato quando si entra nell'array durante la lettura o la copia. Quale sarebbe un valore di passo appropriato per qualsiasi BitmapSource?BitmapSource.CopyPixels -Qual è un buon valore per il passo?

risposta

20

È possibile utilizzare il valore stride = pixel_size * image_width. Ad esempio, per bitmap RGBA con larghezza di 100 pixel, passo = 400.

Alcune applicazioni possono richiedere un allineamento di linea speciale. Ad esempio, i bitmap GDI di Windows richiedono l'allineamento delle linee a 32 bit. In questo caso, per bitmap RGB con larghezza = 33, il valore di falcata 33 * 3 = 99 dovrebbe essere modificato a 100, per avere allineamento di linee a 32 bit nell'array di destinazione.

In genere, è necessario conoscere i requisiti dell'array di destinazione. Non ci sono requisiti speciali, usa pixel_size predefinito * image_width.

+1

Quindi immagino che sia la dimensione in pixel in byte allora? –

+6

Sì, questa è la dimensione in pixel in byte. La proprietà BitmapSource.Format restituisce la struttura di PixelFormat. Ad esempio, la dimensione dei pixel per Bgr32 è 4, per Bgr24 - 3, per Gray8 - 1 ecc. Copiando i dati bitmap sull'array, è necessario conoscere esattamente la struttura dell'array risultante ed è definita dalla proprietà Format. –

+0

Grazie mille. –

Problemi correlati