Search code examples
c#metafile

How do I parse a polyline metafile record out of a byte array?


I need a little help in defining the following Windows GDI type in C#. I have the data in the form of a byte[] in C#, and I need to somehow marshal or cast it as the following in C#. I suppose I need to define the proper struct? This is the type:

NAME

META_POLYLINE

NEAREST API CALL

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

DESCRIPTION

    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

A polyline is a list of points. Unlike a polygon, a polyline is always unfilled, and can be open.


Solution

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

    (Untested)