¿Cómo analizo un registro metarchivo polilínea de una matriz de bytes?

StackOverflow https://stackoverflow.com/questions/1773953

  •  21-09-2019
  •  | 
  •  

Pregunta

Necesito un poco de ayuda en la definición de los siguientes tipos de GDI de Windows en C #. Tengo los datos en la forma de un byte[] en C #, y necesito reunir alguna manera o proyectarlo como la siguiente en C #. Supongo que necesito para definir la estructura adecuada? Este es el tipo:

NOMBRE

META_POLYLINE

CERCANA llamada de API

#include <windows.h>
BOOL32 Polyline
(
    HDC32 hdc,
    const POINT32 *pt,
    INT32 count
);

descripción

    U16 array no                Value
    --------------------------- --------------
    0                           no of points
    1 each odd until the end    x of the point
    2 each even until the end   y of the point

Una polilínea es una lista de puntos. A diferencia de un polígono, una polilínea es siempre sin cubrir, y puede ser abierta.

¿Fue útil?

Solución

byte[] buffer;
fixed (byte* b = buffer)
{
   ushort* ptr = (ushort*)b;
   int count = (int)*ptr;
   var points = new Point[count];
   for (int i = 0; i < count; i++)
   {
       int x = (int)*(++ptr);
       int y = (int)*(++ptr);
       points[i] = new Point(x, y);
   }
}

(no probado)

Otros consejos

¿Has mirado en la entrada polilínea en PInvoke.net todavía?

De acuerdo, un récord para un metarchivo polilínea ... Es posible que desee intentar hacer una Buffer.BlockCopy de la matriz de bytes a una matriz UInt16.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top