2013-03-22 91 views
-2

编辑:地图[] []充满了按钮如何使用带按钮的流媒体播放器。图片

主要问题是.image似乎无法保存。 我想做一个负载,当我加载它在每个地图[i] [j]恢复其以前的状态。一切似乎exept的图像配

FileStream file = new FileStream(@""+AppDomain.CurrentDomain.BaseDirectory+ "\\objects\\savegame"+spacing+".sav", FileMode.Create, FileAccess.ReadWrite); 

StreamWriter sw = new StreamWriter(file); 
     for (Int32 i = 0; i <columns; i++) 
     { 
      for (Int32 j = 0; j < columns; j++) 
      { 
       sw.WriteLine(map[i][j].Enabled); 
       sw.WriteLine(map[i][j].Enabled); 
       sw.WriteLine(map[i][j].Image); 
       sw.WriteLine(map[i][j].Tag); 
       sw.WriteLine(map[i][j].Text); 
       sw.WriteLine(map[i][j].Name); 
       sw.WriteLine(map[i][j].Height); 
       sw.WriteLine(map[i][j].Width); 
      } 
     } 


FileStream file = new FileStream(@"" + AppDomain.CurrentDomain.BaseDirectory + "\\objects\\savegame" + spacing + ".sav", FileMode.Create, FileAccess.ReadWrite); 
    StreamReader sr = new StreamReader(file); 
for (Int32 i = 0; i < columns; i++) 
    { 
     for (Int32 j = 0; j < columns; j++) 
     { 
      map[i][j].Enabled = Convert.ToBoolean(sr.ReadLine()); 
      map[i][j].Image = Convert.ToString(sr.ReadLine());// this is the problem 
      map[i][j].Tag = Convert.ToString(sr.ReadLine()); 
      map[i][j].Text = Convert.ToString(sr.ReadLine()); 
      map[i][j].Name = Convert.ToString(sr.ReadLine()); 
      map[i][j].Height = Convert.ToInt32(sr.ReadLine()); 
      map[i][j].Width = Convert.ToInt32(sr.ReadLine()); 
     } 
    } 
sr.Close(); 
} 

//Sample location for the image --->map[i][j].Image = Image.FromFile(AppDomain.CurrentDomain.BaseDirectory + "objects\\map\\mapgrass" + spacing + ".png"); 
+0

什么意思是“.image”? – 2013-03-22 15:16:01

+0

我期望它将当前图像的位置保存在一行中,但情况并非如此 – Kapein 2013-03-22 15:17:49

+0

如果您需要位置,则需要保存诸如Left或Top之类的属性。看到我的答案。 – 2013-03-22 15:24:38

回答

1

我不明白你的很多问题的工作,但我可以看到一个错误:请不要忘记写后Close您的流,并把你的代码using块。

using(StreamWriter sw = new StreamWriter(file)) 
{ 
    for (Int32 i = 0; i <columns; i++) 
    { 
    ..... 
    } 

    sw.Close(); 
} 

更新:

如果使用WriteLine(map[i][j].Image),该系统实际上是调用WriteLine(map[i][j].Image.ToString())返回Image类的名称。如果你想保存任何有用的信息,你必须在那里map[i][j].Image.somethingmap[i][j].whatever_useful。图像是一个二进制对象 - 通常是位图图片,您不能将其保存为整个文本文件并从中加载。

+0

哦,我忘了在帖子中添加sw.Close, 错误不能隐式地将类型'字符串'转换为'System.Drawing.Image' – Kapein 2013-03-22 15:20:29

+0

这真的很好,谢谢我会看到我能现在就做 – Kapein 2013-03-22 15:27:10

+0

请不要告诉我们你真的认为可以用这种方式将字符串转换为图像。 – 2013-03-22 15:27:43