我正在尝试将位图图像转换为字节数组。我使用 MediaLibrary 类选择了所有图像,并将其添加到位图图像列表中。这是我的代码
using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication())
{
if (!store.DirectoryExists("ImagesZipFolder"))
{
store.CreateDirectory("ImagesZipFolder");
for (int i = 0; i < imgname.Count(); i++)
{
using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream(@"ImagesZipFolder\" + imgname[i], System.IO.FileMode.CreateNew, store))
{
byte[] bytes = null;
using (MemoryStream ms = new MemoryStream())
{
WriteableBitmap wBitmap = new WriteableBitmap(ImgCollection[i]);
wBitmap.SaveJpeg(ms, wBitmap.PixelWidth, wBitmap.PixelHeight, 0, 100);
stream.Seek(0, SeekOrigin.Begin);
bytes = ms.GetBuffer();
stream.Write(bytes, 0, bytes.Length);
}
// byte[] bytes = Encoding.UTF8.GetBytes(imgname[i]);//new byte[ImgCollection[i].PixelWidth * ImgCollection[i].PixelHeight * 4];
// stream.Write(bytes, 0, bytes.Length);
}
}
}
else {
directory = true;
}
}
基本上我要做的是,从设备中选择所有图像或照片并创建该图像的zip文件。我成功地创建了一个图像的zip文件。当我提取该文件时有一些图像,但问题是当我双击图像时,我看不到该图像。我认为问题在于读取图像的字节。我没有弄到什么问题?我的代码是否正确?
答案 0 :(得分:3)
也许你可以试试下面的内容。我知道这段代码可以维护图像,所以如果你没有运气使用它,你可能会有不同的问题。
// Convert the new image to a byte[]
ImageConverter converter = new ImageConverter();
byte[] newBA = (byte[])converter.ConvertTo(newImage, typeof(byte[]));
ImageConverter属于System.Drawing命名空间。
更新
http://msdn.microsoft.com/en-GB/library/system.windows.media.imagesourceconverter.convertto.aspx
您应该可以使用它来代替我建议的System.Drawing类型。
答案 1 :(得分:0)
无需将WriteableBitmap保存到MemoryStream,然后将其复制到IsolatedStorageFileStream。只需将位图直接保存到IsolatedStorageFileStream。
using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream(@"ImagesZipFolder\" + imgname[i], System.IO.FileMode.CreateNew, store))
{
WriteableBitmap wBitmap = new WriteableBitmap(ImgCollection[i]);
wBitmap.SaveJpeg(stream, wBitmap.PixelWidth, wBitmap.PixelHeight, 0, 100);
}
这样您也可以节省内存。如果你真的想节省内存,可以重用WriteableBitmap。