Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Windows窗体应用程序将字符串转换为画布图形_C#_Xml_Canvas_Windows Forms Designer - Fatal编程技术网

C# Windows窗体应用程序将字符串转换为画布图形

C# Windows窗体应用程序将字符串转换为画布图形,c#,xml,canvas,windows-forms-designer,C#,Xml,Canvas,Windows Forms Designer,以下内容都是c#: 我使用各种图形方法在画布(LevelPanel)上绘制,然后将其保存到XML文件中。我通过将其转换为字符串来实现: private void Save_Click(object sender, EventArgs e) { string filename = FileNameBox.Text; Bitmap bmp = new Bitmap(LevelPanel.Width, LevelPanel.Height);

以下内容都是c#: 我使用各种图形方法在画布(LevelPanel)上绘制,然后将其保存到XML文件中。我通过将其转换为字符串来实现:

 private void Save_Click(object sender, EventArgs e)
    {
        string filename = FileNameBox.Text;

         Bitmap bmp = new Bitmap(LevelPanel.Width, LevelPanel.Height);
         Graphics g = Graphics.FromImage(bmp);
         Rectangle rect = LevelPanel.RectangleToScreen(LevelPanel.ClientRectangle);
         g.CopyFromScreen(rect.Location, Point.Empty, LevelPanel.Size);
         g.Dispose();
        string picString = "";

        using (MemoryStream m = new MemoryStream())
        {
            bmp.Save(m, ImageFormat.Png);
            picString = Convert.ToBase64String(m.ToArray());
            m.Close();
        }
        File.WriteAllText(@filename, picString);

    }

是否有任何方法可以加载文件(获取字符串并将其转换回图像)。我四处看了看,但在这上面找不到任何东西。我们衷心感谢您的帮助。如果不可能,是否有人可以建议将图像保存/加载为xml文件的其他方法。

如果您只是使用
file.writealText(“somefile.xml”,picString)保存xml

像这样阅读xml

string base64String = File.ReadAllText("somefile.xml");
读取XML文件后,可以通过调用此方法将其转换回图像

public static Image ImageFromBase64String(string base64String)
{
    byte[] imageBytes = Convert.FromBase64String(base64String);

    using (MemoryStream ms = new MemoryStream(imageBytes))
    {
        return new Bitmap(Image.FromStream(ms, true));
    }
}

谢谢将其加载回面板会导致系统内存不足,我使用的是LevelPanel.BackgroundImage=Image。编译得和以前一样好。有什么想法吗?更新了这一行的答案
返回新位图(Image.FromStream(ms,true))。但是内存不足是很奇怪的,除非你正在处理大型图像,不要忘记在使用完图像后处理它们。是的,我忘了处理它们。但如果在加载后立即使用.dispose(),则我不确定将dispose命令放在何处。它会给我以下错误:System.Drawing.dll中发生类型为“System.ArgumentException”的未处理异常,并表示该参数无效。