C #: hacer los primeros 8 bytes copiados por copyPixels contienen una cabecera?
Pregunta
Estoy utilizando el método en un copyPixels BitmapImage (C #) y desea obtener los datos de píxeles primas. Sin embargo, cuando examino el tampón en bruto en un depurador, veo que los primeros 8 bytes son siempre (Hex)
67174944 00300000
aquí está el fragmento de código:
int stride = frm.PixelWidth * frm.Format.BitsPerPixel / 8;
stride = (stride % 4) == 0 ? stride : (stride + 4);
rawPixels = new byte[stride * frm.PixelHeight * frm.Format.BitsPerPixel / 8];
frm.CopyPixels(rawPixels, stride, 0);
No se puede encontrar ningún documento que diga lo que podría ser esta cabecera. Es interesante que el texto equivalente de 6717 es "DI", lo que me hizo pensar que esto tiene algo que ver con un encabezado DIB, pero estoy bastante seguro de que estoy equivocado. gracias.
Solución
Se busca en el encabezado de tabla de objeto. Añadir 8 a la dirección para encontrar los elementos de la matriz.
Otros consejos
No tengo ni idea de lo que está mal en los primeros 8 bytes, pero algunas otras observaciones:
El cálculo de la zancada parece extraño para mí. ¿Qué pasa con
stride = ((stride+3)/4)*4;
A continuación, supongo que el tamaño de la memoria intermedia rawPixels-debería leer
rawPixels = new byte[stride * frm.PixelHeight]