因此,我从仅使用颜色作为参数创建笔开始.
除了分配float[]
之外,我可以用破折号做什么?
我尝试使用比较运算符.
检查它是否为空结果:OutOfMemoryException
.
检查潜在现有分配的长度也失败 - 相同的异常。
问题始于尝试使用Buffer.BlockCopy()
将数据从一行float[,]
传输到笔的破折号图案。
此行为是设计使然。
如果您尚未指定不同于默认DashStyle.SolidColor
的破折号样式或将 Pen.DashPattern 设置为 float[]
值,因此,将 Pen.DashStyle 设置为 DashStyle.Custom
,则不会设置Pen.DashPattern
,本机 GdipGetPenDashCount
方法将返回Status != GDIP.Ok = 0
。
如果未设置短划线计数,则默认行为是引发 GDI+ 异常,在本例中为OutOfMemoryException
。
您可以做的是测试笔DashStyle
并尝试仅在DashStyle != DashStyle.Solid
时获取其DashPattern
(显式设置此样式不会创建DashPattern
):
if (pen.DashStyle != DashStyle.Solid)
{
Console.WriteLine(pen.DashStyle);
pen.DashPattern.ToList().ForEach(f => Console.WriteLine(f));
}