我需要定义在C#以下的Windows GDI型一点帮助。我有在C#中byte[]形式的数据,我需要以某种方式编组或将它转换为C#以下。请参阅我的其他问题的,因为我得到了答案折线。这是类型:

NAME

META_CREATEPENINDIRECT

NEAREST API调用

#include <windows.h>
HPEN32 CreatePenIndirect(const LOGPEN32 *pen);

typedef struct tagLOGPEN
{
    UINT        lopnStyle;
    POINT       lopnWidth;
    COLORREF    lopnColor;
} LOGPEN;

描述

U16     Value
0       lopnStyle
1       lopnWidth
2, 3    lopnColor
  

lopnColor是笔的颜色,lopnWidth是笔的宽度,如果笔的宽度为> 1,但lopnStyle不固,然后lopnStyle被忽略,设置为固体反正。

     

lopnStyle可以PS_SOLIDPS_DASHPS_DOTPS_DASHDOTPS_DASHDOTDOTPS_NULLPS_INSIDEFRAMEPS_USERSTYLEPS_ALTERNATE之一。退房的,他们实际上指的是源。

     

也Theres一组标志和掩模可以在lopnStyle中找到,以及该设定的端部和连接样式用钢笔画线,它们是PS_STYLE_MASKPS_ENDCAP_ROUNDPS_ENDCAP_SQUAREPS_ENDCAP_FLATPS_ENDCAP_MASKPS_JOIN_ROUNDPS_JOIN_BEVELPS_JOIN_MITERPS_JOIN_MASKPS_COSMETICPS_GEOMETRICPS_TYPE_MASK,再次检查出的源推测这些进行。


更新:这是接近我可以得到迄今:

fixed (byte* b = dataArray)
{
    byte* ptr = (byte*)b;
    // Get style
    l_nStyle = (ushort)*(ptr);
    ++ptr;
    // Get width
    l_nWidth = (ushort)*(++ptr);
    ++ptr;
    // skip one ushort
    ++ptr; ++ptr;
    // Get RGB colors
    l_nColorR = (ushort)*(++ptr);
    l_nColorG = (ushort)*(++ptr);
    l_nColorB = (ushort)*(++ptr);
}
有帮助吗?

解决方案

byte[] buffer;
int style = BitConverter.ToUInt16(buffer, 0);
int width = BitConverter.ToUInt16(buffer, 2);
var color = Color.FromArgb(buffer[4], buffer[5], buffer[6]);
var pen   = new Pen(color, width)
{
    DashStyle = ..., // set style
    StartCap = ...,
    EndCap = ...
};

(未测试的)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top