C# 字节数组中的图像未显示
我有一个应用程序,可以拍摄照片,将它们转换为字节数组,并将它们保存在本地的独立存储中。然后,它将其读出并将其转换回位图图像 但是,我似乎无法在列表框中显示图像。我使用的代码与我在另一个页面中使用的代码完全相同 位图图像中有一个图像,但这是我所知道的。不管那个图像是否合法,我不知道或者不知道如何检查 任何想法都将不胜感激 请参阅下面的代码 转换图像C# 字节数组中的图像未显示,c#,.net,windows-phone-7,windows-phone-7.1,bitmapimage,C#,.net,Windows Phone 7,Windows Phone 7.1,Bitmapimage,我有一个应用程序,可以拍摄照片,将它们转换为字节数组,并将它们保存在本地的独立存储中。然后,它将其读出并将其转换回位图图像 但是,我似乎无法在列表框中显示图像。我使用的代码与我在另一个页面中使用的代码完全相同 位图图像中有一个图像,但这是我所知道的。不管那个图像是否合法,我不知道或者不知道如何检查 任何想法都将不胜感激 请参阅下面的代码 转换图像 public byte[] ImageToBytes(BitmapImage img) { using (MemoryStr
public byte[] ImageToBytes(BitmapImage img)
{
using (MemoryStream ms = new MemoryStream())
{
WriteableBitmap btmMap = new WriteableBitmap(img.PixelWidth, img.PixelHeight);
// write an image into the stream
Extensions.SaveJpeg(btmMap, ms, img.PixelWidth, img.PixelHeight, 0, 100);
return ms.ToArray();
}
}
public BitmapImage BytesToImage(byte[] bytes)
{
BitmapImage bitmapImage = new BitmapImage();
MemoryStream ms = new MemoryStream(bytes);
bitmapImage.SetSource(ms);
return bitmapImage;
}
用图像分类
public class NewItem
{
ObservableCollection<BitmapImage> images = new ObservableCollection<BitmapImage>();
[DataMember]
public ObservableCollection<BitmapImage> Images
{
get { return images; }
set { images = value; }
}
[DataMember]
public string Notes { get; set; }
[DataMember]
public string ItemID { get; set; }
}
公共类NewItem
{
ObservableCollection图像=新的ObservableCollection();
[数据成员]
公众可观测采集图像
{
获取{返回图像;}
设置{images=value;}
}
[数据成员]
公共字符串注释{get;set;}
[数据成员]
公共字符串ItemID{get;set;}
}
保存到存储
public static void AddOrUpdateUnsavedItems(NewItem _item)
{
var store = IsolatedStorageFile.GetUserStoreForApplication();
List<NewItem> allunsaveditems = new List<NewItem>();
if (store.FileExists("unsaveditem"))
{
allunsaveditems.Add(_item);
allunsaveditems.AddRange(LoadUnsavedItemsFromIsolatedStorage());
store.DeleteFile("unsaveditem");
}
UnsavedRegisters.Clear();
foreach (NewItem ni in allunsaveditems)
{
StoredItem newUnsavedItem = new StoredItem();
newUnsavedItem.ItemID = ni.ItemID;
newUnsavedItem.Notes = ni.Notes;
foreach (BitmapImage bmp in ni.Images)
{
newUnsavedItem.ImageBytes.Add(newUnsavedItem.ImageToBytes(bmp));
}
UnsavedRegisters.Add(newUnsavedItem);
}
using (var stream = new IsolatedStorageFileStream("unsaveditem", FileMode.OpenOrCreate, FileAccess.Write, store))
{
DataContractSerializer dcs = new DataContractSerializer(typeof(List<StoredItem>));
dcs.WriteObject(stream, UnsavedRegisters);
}
}
publicstaticvoidaddorupdateunsavedItems(NewItem\u item)
{
var store=IsolatedStorageFile.GetUserStoreForApplication();
List allunsaveditems=新列表();
如果(store.FileExists(“unsaveditem”))
{
添加(_项);
AddRange(LoadUnsavedItemsFromIsolatedStorage());
store.DeleteFile(“未保存项”);
}
未保存的寄存器。清除();
foreach(allunsaveditems中的新项目ni)
{
StoredItem newUnsavedItem=新的StoredItem();
newUnsavedItem.ItemID=ni.ItemID;
newUnsavedItem.Notes=ni.Notes;
foreach(ni.Images中的位图图像bmp)
{
newUnsavedItem.ImageBytes.Add(newUnsavedItem.ImageToBytes(bmp));
}
UnsavedRegisters.Add(newUnsavedItem);
}
使用(var stream=new-IsolatedStorageFileStream(“unsaveditem”,FileMode.OpenOrCreate,FileAccess.Write,store))
{
DataContractSerializer dcs=新的DataContractSerializer(类型(列表));
dcs.WriteObject(流、未保存的寄存器);
}
}
从仓库装货
public static List<NewItem> LoadUnsavedItemsFromIsolatedStorage()
{
List<NewItem> unsavedItems = new List<NewItem>();
try
{
var store = IsolatedStorageFile.GetUserStoreForApplication();
if (store.FileExists("unsaveditem"))
{
using (var stream = new IsolatedStorageFileStream("unsaveditem", FileMode.OpenOrCreate, FileAccess.Read, store))
{
if (stream.Length > 0)
{
DataContractSerializer dcs = new DataContractSerializer(typeof(List<StoredItem>));
List<StoredItem> storedItems = dcs.ReadObject(stream) as List<StoredItem>;
foreach (StoredItem si in storedItems)
{
NewItem ni = new NewItem();
ni.ItemID = si.ItemID;
ni.Notes = si.Notes;
foreach (byte[] imageBytes in si.ImageBytes)
{
ni.Images.Add(si.BytesToImage(imageBytes));
}
unsavedItems.Add(ni);
}
}
}
}
}
catch (Exception)
{
//MessageBox.Show("and error happened getting the unsaved items");
// handle exception
return null;
}
return unsavedItems;
}
公共静态列表LoadUnsavedItemsFromIsolatedStorage()
{
List unsavedItems=新列表();
尝试
{
var store=IsolatedStorageFile.GetUserStoreForApplication();
如果(store.FileExists(“unsaveditem”))
{
使用(var stream=new-IsolatedStorageFileStream(“unsaveditem”,FileMode.OpenOrCreate,FileAccess.Read,store))
{
如果(stream.Length>0)
{
DataContractSerializer dcs=新的DataContractSerializer(类型(列表));
将storedItems=dcs.ReadObject(流)列为列表;
foreach(storedItems中的StoredItem si)
{
NewItem ni=newnewitem();
ni.ItemID=si.ItemID;
ni.Notes=si.Notes;
foreach(si.imageBytes中的字节[]imageBytes)
{
添加(si.BytesToImage(imageBytes));
}
未保存项。添加(ni);
}
}
}
}
}
捕获(例外)
{
//Show(“获取未保存的项目时出错”);
//处理异常
返回null;
}
退回未储存的物品;
}
这应该不是问题,我让它在BitmapSource上工作,我相信BitmapImage继承自BitmapSource,请在您的列表框中尝试下面的代码
<Border Height="200" Width="200">
<Border.Background>
<ImageBrush ImageSource="{Binding ItemImage}" />
</Border.Background>
</Border>
ItemImage是保存位图源图像的属性。我不知道发生了什么变化,但它开始工作