【发布时间】:2015-08-04 17:37:56
【问题描述】:
我想在 XML 文件中存储一个小的 png 图像并将其加载回 Texture2D。
这就是我正在做的事情
保存代码
我正在用 BinaryWriter 将 Texture2D 的数据写入 MemoryStream,
然后将 MemoryStream 转换为数组。我必须将数组转换为 Base64String,因为您无法保存所有字符
在 XML 文件中。
字符串保存在我的 XML 文件中。
public static string SaveTextureData(this Texture2D texture)
{
int width = texture.Width;
int height = texture.Height;
Color[] data = new Color[width * height];
texture.GetData<Color>(data, 0, data.Length);
MemoryStream streamOut = new MemoryStream();
BinaryWriter writer = new BinaryWriter(streamOut);
writer.Write(width);
writer.Write(height);
writer.Write(data.Length);
for (int i = 0; i < data.Length; i++)
{
writer.Write(data[i].R);
writer.Write(data[i].G);
writer.Write(data[i].B);
writer.Write(data[i].A);
}
return Convert.ToBase64String(streamOut.ToArray());
}
加载代码
这里也一样。我正在将 Base64Str 转换为数组并尝试读取它。
但我不能读回来。
public static Texture2D LoadTextureData(this string gfxdata, GraphicsDevice gfxdev)
{
byte[] arr = Convert.FromBase64String(gfxdata);
MemoryStream input = new MemoryStream();
BinaryWriter bw = new BinaryWriter(input);
bw.Write(arr);
using (BinaryReader reader = new BinaryReader(input))
{
var width = reader.ReadInt32();
var height = reader.ReadInt32();
var length = reader.ReadInt32();
var data = new Color[length];
for (int i = 0; i < data.Length; i++)
{
var r = reader.ReadByte();
var g = reader.ReadByte();
var b = reader.ReadByte();
var a = reader.ReadByte();
data[i] = new Color(r, g, b, a);
}
var texture = new Texture2D(gfxdev, width, height);
texture.SetData<Color>(data, 0, data.Length);
return texture;
}
}
这里可能需要一些帮助。
在读取方法中获取值无法读取的异常。 排队
var width = reader.ReadInt32();
【问题讨论】:
-
您能否更具体地说明您遇到了什么问题? “它不起作用”不是问题陈述。
-
在读取方法中获取值无法读取的异常。在行 var width = reader.ReadInt32();
-
您是否尝试过调试任何东西?看看读者长什么样?为您调试它几乎是不可能的。
-
以后在 StackOverflow 上寻求异常帮助时,请务必包含异常的完整
ToString()输出,包括异常类型和回溯。在这种情况下,您会收到System.IO.EndOfStreamException类型的异常,这是对问题的重要提示。
标签: c# xml xna monogame texture2d