我需要将图片(存储在 Image 类型的对象中)转换为字符串以在 Metro 应用程序中存储(然后再转换回 Image 对象以进行显示)
我在 .NET 4.0 等中找到了很多将图像转换为 base64 字符串的答案,但在 4.5 中没有 System.Windows.Bitmap 命名空间(Image 类在 Windows.UI.Xaml.Media.Imaging 中)和在 4.0“Save()”中实现该命名空间的方法似乎不在 4.5 中......除非我找不到它。
这里有一个这样做的例子,但就像我说的那样,它在 Metro 应用程序/.NET 4.5 中不起作用
有任何想法吗?
更多详细信息:执行此操作的方法将转换包含图像对象的实例字段(我使用了它的源属性,这是正确的吗?)并且需要将转换的结果字符串存储在实例字符串字段中。然后可以序列化整个对象,忽略 Image 字段,希望稍后反序列化并将字符串恢复到 Image 字段以供显示。到目前为止,我尝试使用 DataContractSerializer 从图像中序列化字符串,但它似乎不喜欢它。一旦我从图像中得到一个字符串,我就可以对其进行序列化,但这不是我以前做过的事情。
此外,似乎唯一正确的 .net 4.5 文档是此处的页面:http: //msdn.microsoft.com/library/windows/apps/
.net 4.5 的“正常外观”msdn 站点上的页面似乎并不总是在 Metro 应用程序中工作?(只是一个理论?)
[解决了]
我终于明白了!对于其他必须这样做的人,答案在这里:http ://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/38c6cb85-7454-424f-ae94-32782c036567/
我做了这个
var reader = new DataReader(myMemoryStream.GetInputStreamAt(0));
var bytes = new byte[myMemoryStream.Size];
await reader.LoadAsync((uint)myMemoryStream.Size);
reader.ReadBytes(bytes);
在这个序列之后,字节数组bytes
将包含来自流的数据,从那里我将一个字符串设置为
Convert.ToBase64String(bytes);