我需要将一张图片(存储在Image类型的对象中)转换为一个字符串进行存储(以后转换回用于显示的Image对象)
我在.NET 4.0等中找到了很多将图像转换为base64字符串的答案,但在4.5中没有System.Windows.Bitmap命名空间(Image类在Windows.UI.Xaml.Media中。成像)以及在4.0“Save()”中使其成为可能的命名空间中的方法似乎不在4.5中......除非我找不到它。
这是一个做这个here的例子,但就像我说它在Metro app / .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);
答案 0 :(得分:2)
我终于明白了!对于其他任何必须这样做的人,答案就在这里: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);
在此序列之后,字节数组字节将包含来自其中的流的数据,从那里我将字符串设置为值
Convert.ToBase64String(bytes);
答案 1 :(得分:1)
我不确定这是因为我没有在这里安装.net 4.5,但我认为这可行:
您可以使用BitmapSource.CopyPixels()方法提取图像的像素:
http://msdn.microsoft.com/en-us/library/ms616043(v=vs.110).aspx
然后使用Convert.ToBase64String()进行转换。
此外,这里有一些有用的成像技巧:
答案 2 :(得分:0)
试试BitmapEncoder
。 Example of how to create a BitmapEncoder here。适当的名称空间为Windows.Graphics.Imaging
。
BitmapEncoder
为您提供编码器。然后,您可以使用GetPixelDataAsync(BitmapPixelFormat, BitmapAlphaMode, BitmapTransform, ExifOrientationMode, ColorManagementMode)
获取像素数据。接下来,您可以使用任何通用的C#base64编码器。
(例子是Javascript,但也应该适用于C#,因为类存在于C#中)
答案 3 :(得分:0)
您应该存储图像(例如JPEG)格式的编码格式,解码回byte [],创建MemoryStream,然后可以从流中创建Metro BitmapImage。