C# 使用Graphic.DrawLines(钢笔、点)作为图元文件,当点数较大时,图片无法打开

C# 使用Graphic.DrawLines(钢笔、点)作为图元文件,当点数较大时,图片无法打开,c#,gdi+,metafile,C#,Gdi+,Metafile,我对GDI+图元文件有问题。我想通过图形保存图元文件。当点计数为10000并且可以打开保存的图元文件时,它工作良好。但当点计数较大(例如计数=10000000)时,mspaint.exe无法打开图元文件 有什么我错过的吗?图元文件记录大小是否有限制?顺便说一下,draw矩形也有这个问题 这是我的密码: private void button1_Click(object sender, EventArgs e) { int width = 1489; int heigh

我对GDI+图元文件有问题。我想通过图形保存图元文件。当点计数为10000并且可以打开保存的图元文件时,它工作良好。但当点计数较大(例如计数=10000000)时,mspaint.exe无法打开图元文件

有什么我错过的吗?图元文件记录大小是否有限制?顺便说一下,
draw矩形
也有这个问题

这是我的密码:

private void button1_Click(object sender, EventArgs e)  
{  
    int width = 1489;  
    int height = 471;

    Graphics offScreenBufferGraphics;
    Metafile m;
    using (MemoryStream stream = new MemoryStream())
    {
        using (offScreenBufferGraphics = Graphics.FromHwndInternal(IntPtr.Zero))
        {
            IntPtr deviceContextHandle = offScreenBufferGraphics.GetHdc();
            m = new Metafile(
            stream,
            deviceContextHandle,
            new RectangleF(0, 0, width, height),
            MetafileFrameUnit.Pixel,
            EmfType.EmfPlusOnly);
            offScreenBufferGraphics.ReleaseHdc();
        }
    }

    using (Graphics g = Graphics.FromImage(m))
    {
        // Set everything to high quality
        g.SmoothingMode = SmoothingMode.HighQuality;
        g.InterpolationMode = InterpolationMode.HighQualityBicubic;
        g.PixelOffsetMode = PixelOffsetMode.HighQuality;
        g.CompositingQuality = CompositingQuality.HighQuality;

        MetafileHeader metafileHeader = m.GetMetafileHeader();
        g.ScaleTransform(
            metafileHeader.DpiX / g.DpiX,
            metafileHeader.DpiY / g.DpiY);

        g.PageUnit = GraphicsUnit.Pixel;
        g.SetClip(new RectangleF(0, 0, width, height));

        // clears the image and colors the entire background
        g.Clear(Color.White);

        // draw lines
        using (Pen pen = new Pen(Color.Black, 1f))
        {
            Random rnd = new Random(DateTime.Now.Millisecond);
            List<PointF> polyPoints = new List<PointF>();
            const int count = 10000;
            for (int i = 1; i <= 10000000; i++)
            {
                polyPoints.Add(new PointF(rnd.Next(1000),rnd.Next(1000)));
            }
            g.DrawLines(pen, polyPoints.ToArray());
            // while
        } // using
    } // using

    // Get a handle to the metafile
    IntPtr iptrMetafileHandle = m.GetHenhmetafile();

    // Export metafile to an image file
    CopyEnhMetaFile(iptrMetafileHandle, @"F:\CacheToDisk\test2.emf");

    // Delete the metafile from memory
    DeleteEnhMetaFile(iptrMetafileHandle);
}

[DllImport("gdi32.dll")]
static extern IntPtr CopyEnhMetaFile(  // Copy EMF to file
    IntPtr hemfSrc,   // Handle to EMF
    String lpszFile // File
);

[DllImport("gdi32.dll")]
static extern int DeleteEnhMetaFile(  // Delete EMF
    IntPtr hemf // Handle to EMF
);
private void按钮1\u单击(对象发送者,事件参数e)
{  
整数宽度=1489;
内部高度=471;
图形offScreenBufferGraphics;
元文件m;
使用(MemoryStream stream=new MemoryStream())
{
使用(offScreenBufferGraphics=Graphics.fromHwnInternal(IntPtr.Zero))
{
IntPtr deviceContextHandle=offScreenBufferGraphics.GetHdc();
m=新图元文件(
流动
deviceContextHandle,
新矩形F(0,0,宽度,高度),
MetafileFrameUnit.Pixel,
EmfType.EmfPlusOnly);
offScreenBufferGraphics.ReleaseHdc();
}
}
使用(Graphics g=Graphics.FromImage(m))
{
//把一切都设置为高质量
g、 SmoothingMode=SmoothingMode.HighQuality;
g、 插值模式=插值模式。高质量双三次;
g、 PixelOffsetMode=PixelOffsetMode.HighQuality;
g、 合成质量=合成质量。高质量;
MetafileHeader MetafileHeader=m.GetMetafileHeader();
g、 标度变换(
metafileHeader.DpiX/g.DpiX,
metafileHeader.DpiY/g.DpiY);
g、 PageUnit=GraphicsUnit.Pixel;
g、 SetClip(新矩形F(0,0,宽度,高度));
//清除图像并为整个背景着色
g、 清晰(颜色:白色);
//划线
使用(钢笔=新钢笔(颜色:黑色,1f))
{
Random rnd=新随机(DateTime.Now.毫秒);
列表多点=新列表();
常数整数计数=10000;

对于(int i=1;i这似乎是一个限制。如果我使用DrawPath而不是DrawLines,它会正常工作