I have an application that takes photos, converts them into byte arrays and saves them locally in the Isolated Storage. It then reads them out and converts them back into an BitmapImage.

However, I can't seem to show the images in a ListBox. I am using the same code I have in another page that works perfectly.

The BitmapImage has a image in it, but that is as much as I know. Whether that image is legitimate or not, I don't know or know how to check.

Any ideas would be greatly appreciated.

SEE CODE BELOW

Convert Image

 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;
    }

Class with image

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; }
}

Saving to storage

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);
        }

    }

Loading from storage

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;
    }
有帮助吗?

解决方案 2

I don't know what has changed, but it started working.

其他提示

This should not be a problem, I had this working for a BitmapSource, Which I believe BitmapImage inherits from, try the code below in your listbox

 <Border Height="200" Width="200">
                            <Border.Background>
                                <ImageBrush ImageSource="{Binding ItemImage}" />
                            </Border.Background>
                        </Border>

ItemImage is the Property holding your BitmapSource image.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top