I create a app to read ZipArchive(100+ photo),And Use Stream, MemoryStream, IRandomAccessStream, and BinaryReader to setSource of the bitmapImage.
private byte[] GetBytes(ZipArchiveEntry entity)
    {
        Stream stream = entity.Open();
        MemoryStream ms = new MemoryStream();
        BinaryReader reader = null;
        byte[] imageData = null;
        try
        {
            stream.CopyTo(ms);
            imageData = new byte[ms.Length];
            string fileclass = "";
            reader = new BinaryReader(ms);
            ms.Seek(0, 0);
            imageData = reader.ReadBytes((int)ms.Length);
            //Verify png jpg bmp
            some code and return imageData
            //throw exception,return null
            else
            {
                throw new Exception();
            }
        }
        catch (Exception ex)
        {
            return null;
        }
        //Dispose
    }
BitmapImage.SetSource by byte[]
public async Task<MangaPageEntity> GetImageFromZipArchiveEntry(ZipArchiveEntry entity, int index)
    {
        MangaPageEntity mpe = new MangaPageEntity();
        mpe.Index = index;
        IRandomAccessStream iras = null;
        try
        {
            byte[] data = GetBytes(entity);
            iras = data.AsBuffer().AsStream().AsRandomAccessStream();
            iras.Seek(0);
            await mpe.Picture.SetSourceAsync(iras);
        }//catch and dispose
        return mpe;
In this way, It use too many memory too run at phone ..
 
    