0

写真を撮ってバイト配列に変換し、分離ストレージにローカルに保存するアプリケーションがあります。次に、それらを読み取り、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;
    }
4

2 に答える 2

0

これは問題ではありません。BitmapImage が継承していると思われる BitmapSource でこれが機能していました。リストボックスで以下のコードを試してください。

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

ItemImage は、BitmapSource 画像を保持するプロパティです。

于 2013-09-06T08:38:02.093 に答える