Come effettuo il parsing di un record di metafile polilinea da un array di byte?

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

  •  21-09-2019
  •  | 
  •  

Domanda

Ho bisogno di un po 'di aiuto nel definire il seguente tipo di Windows GDI in C #. Ho i dati sotto forma di un byte[] in C #, e ho bisogno di schierare o lanciare come il seguente in C # in qualche modo. Suppongo che ho bisogno di definire il corretto struct? Questo è il tipo:

nome

META_POLYLINE

PIU 'VICINA API CALL

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

DESCRIZIONE

    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 polilinea è un elenco di punti. A differenza di un poligono, una polilinea è sempre riempita, e può essere aperto.

È stato utile?

Soluzione

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);
   }
}

(testato)

Altri suggerimenti

Hai guardato la voce Polilinea su PInvoke.net ancora?

D'accordo, un record metafile per una polilinea ... Si potrebbe desiderare di provare a fare un Buffer.BlockCopy dalla matrice di byte in una matrice UInt16.

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