Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 字节数组中的图像未显示_C#_.net_Windows Phone 7_Windows Phone 7.1_Bitmapimage - Fatal编程技术网

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是保存位图源图像的属性。

我不知道发生了什么变化,但它开始工作