コード例 #1
0
        public async Task SaveFileDataAsync(Guid fileDataId, StorageFile file)
        {
            string fileName = fileDataId.ToString();

            await EnsureInitializedAsync().ConfigureAwait(false);

            if (await _localUserDataFolder.TryGetItemAsync(fileName) != null)
            {
                throw new IOException($"The file '{fileName}' already exists.");
            }

            using (IRandomAccessStreamWithContentType fileStream = await file.OpenReadAsync())
                using (var reader = new DataReader(fileStream.GetInputStreamAt(0)))
                {
                    await reader.LoadAsync((uint)fileStream.Size);

                    byte[] byteArray = new byte[fileStream.Size];
                    reader.ReadBytes(byteArray);

                    string encryptedFileContent = _encryptionProvider.EncryptString(Convert.ToBase64String(byteArray), reuseGlobalIV: true);

                    await CoreHelper.RetryAsync(async() =>
                    {
                        // Create and save the data in the new file.
                        var dataFileCreated = await _localUserDataFolder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);
                        await FileIO.WriteTextAsync(dataFileCreated, encryptedFileContent);
                    }).ConfigureAwait(false);
                }

            _logger.LogEvent(SaveFileEvent, string.Empty);
        }
コード例 #2
0
        private async void bt_Copy5_Click_1(object sender, RoutedEventArgs e)
        {
            BitmapImage bi = new BitmapImage();
            //bi.UriSource = new Uri(tbgif.Text, UriKind.RelativeOrAbsolute);
            //imageGif.Source = bi;
            //bi.ImageOpened += (ee, ss) =>
            //    {
            //        var s1 = ee as BitmapImage;
            //        var h = s1.PixelHeight;
            //    };
            //imageGif.ImageOpened += (ss, ee) =>
            //    {
            //        var s1 = ss as Image;
            //        PlayToSource PlayToSource = s1.PlayToSource;
            //        PlayToConnection Connection = PlayToSource.Connection;
            //        var yy = Connection.State.ToString();
            //    };
            //tbgif.Text = "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/c9/geili_org.gif";
            //tbgif.Text = "http://ww2.sinaimg.cn/bmiddle/666d8d19jw1dvg3m7e0q0j.jpg";
            RandomAccessStreamReference        rass         = RandomAccessStreamReference.CreateFromUri(new Uri(tbgif.Text, UriKind.RelativeOrAbsolute));
            IRandomAccessStreamWithContentType streamRandom = await rass.OpenReadAsync();

            Stream tempStream         = streamRandom.GetInputStreamAt(0).AsStreamForRead();
            var    randomAccessStream = new InMemoryRandomAccessStream();
            var    outputStream       = randomAccessStream.GetOutputStreamAt(0);
            await RandomAccessStream.CopyAsync(tempStream.AsInputStream(), outputStream);

            //bi.SetSource(randomAccessStream);
            //imageGif.Source = bi;
            //imageBrush.ImageSource = bi;
            Gif(randomAccessStream);
        }
コード例 #3
0
        /// <summary>
        /// 输入Uri开始播放Gif图片
        /// </summary>
        /// <param name="Uri"></param>
        private async void Start(string uri)
        {
            var   reg   = @"http(s)?://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?";
            Regex regex = new Regex(reg, RegexOptions.IgnoreCase);
            RandomAccessStreamReference rass = null;

            if (regex.IsMatch(this.Source))
            {
                rass = RandomAccessStreamReference.CreateFromUri(new Uri(uri, UriKind.RelativeOrAbsolute));
            }
            else
            {
                rass = RandomAccessStreamReference.CreateFromUri(new Uri(this.baseUri, uri));
            }
            try
            {
                IRandomAccessStreamWithContentType streamRandom = await rass.OpenReadAsync();

                Stream tempStream         = streamRandom.GetInputStreamAt(0).AsStreamForRead();
                var    randomAccessStream = new InMemoryRandomAccessStream();
                var    outputStream       = randomAccessStream.GetOutputStreamAt(0);
                await RandomAccessStream.CopyAsync(tempStream.AsInputStream(), outputStream);

                try
                {
                    await CreateGifBitFrame(randomAccessStream);

                    PlayGif();
                }
                catch
                {
                    JpegAndPng(randomAccessStream);
                }
            }
            catch
            {
                BitmapImage bi = new BitmapImage();
                if (regex.IsMatch(this.Source))
                {
                    bi.UriSource = new Uri(uri, UriKind.RelativeOrAbsolute);
                }
                else
                {
                    bi.UriSource = new Uri(this.baseUri, uri);
                }
                //imageGif.Source = bi;
            }
        }
コード例 #4
0
        /// <summary>
        /// 把WebUri下完,存放到本地。返回本地的Uri的Uri
        /// </summary>
        /// <param name="WebUri"></param>
        /// <returns></returns>
        private async Task <Uri> GetLocalUri(string WebUri)
        {
            var           fileName           = string.Empty;
            StorageFolder shareLocalFolder   = null;
            StorageFolder tempLocalFolder    = ApplicationData.Current.LocalFolder;
            bool          isShareLocalFolder = false;

            try
            {
                shareLocalFolder = await tempLocalFolder.CreateFolderAsync(myFolder, CreationCollisionOption.FailIfExists);
            }
            catch
            {
                isShareLocalFolder = true;
            }
            if (isShareLocalFolder)
            {
                shareLocalFolder = await tempLocalFolder.GetFolderAsync(myFolder);
            }
            if (shareLocalFolder != null)
            {
                var rass = RandomAccessStreamReference.CreateFromUri(new Uri(WebUri, UriKind.RelativeOrAbsolute));
                IRandomAccessStreamWithContentType streamRandom = await rass.OpenReadAsync();

                using (Stream tempStream = streamRandom.GetInputStreamAt(0).AsStreamForRead())
                {
                    MemoryStream ms = new MemoryStream();
                    await tempStream.CopyToAsync(ms);

                    byte[] bytes = ms.ToArray();

                    string specialCharacters = @"[\/:*?\""-<>|]";
                    WebUri    = Regex.Replace(WebUri, specialCharacters, "");
                    fileName  = WebUri + ".jpg";
                    ImageFile = await shareLocalFolder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);

                    await FileIO.WriteBytesAsync(ImageFile, bytes);
                }

                string filePath = ImageFile.Path;
                return(new Uri("ms-appdata:///local/" + myFolder + "/" + fileName));
            }
            else
            {
                return(new Uri("ms-appdata:///local/"));
            }
        }
コード例 #5
0
        //显示Gif图片开始
        private async void bt_Copy6_Click_1(object sender, RoutedEventArgs e)
        {
            //tbgif.Text = "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/c9/geili_org.gif";
            RandomAccessStreamReference        rass         = RandomAccessStreamReference.CreateFromUri(new Uri(tbgif.Text, UriKind.RelativeOrAbsolute));
            IRandomAccessStreamWithContentType streamRandom = await rass.OpenReadAsync();

            Stream tempStream         = streamRandom.GetInputStreamAt(0).AsStreamForRead();
            var    randomAccessStream = new InMemoryRandomAccessStream();
            var    outputStream       = randomAccessStream.GetOutputStreamAt(0);
            await RandomAccessStream.CopyAsync(tempStream.AsInputStream(), outputStream);

            await CreateGifBitFrame(randomAccessStream);

            PlayGif();
            //dispatcherTimer.Stop();
            //dispatcherTimer.Start();
        }
コード例 #6
0
        /// <summary>
        /// 输入Uri开始播放Gif图片
        /// </summary>
        /// <param name="Uri"></param>
        private async void Start(string uri)
        {
            var   reg   = @"http(s)?://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?";
            Regex regex = new Regex(reg, RegexOptions.IgnoreCase);
            RandomAccessStreamReference rass = null;

            if (regex.IsMatch(this.Source))
            {
                rass = RandomAccessStreamReference.CreateFromUri(new Uri(uri, UriKind.RelativeOrAbsolute));
            }
            else
            {
                try
                {
                    //本地的Uri
                    //rass = RandomAccessStreamReference.CreateFromUri(new Uri(this.BaseUri, uri));
                    rass = RandomAccessStreamReference.CreateFromUri(new Uri(this.baseUri, uri));
                    //var packageLocation = Windows.ApplicationModel.Package.Current.InstalledLocation;
                    //var ss = await packageLocation.GetBasicPropertiesAsync();
                    //var imagesFolder = await packageLocation.GetFolderAsync("Images");
                    //StorageFile file = await imagesFolder.GetFileAsync("amy.jpg");
                    //rass = RandomAccessStreamReference.CreateFromFile(file);
                }
                catch (Exception)
                {
                    Debug.WriteLine("不是一个有效的Uri");
                }
            }
            try
            {
                IRandomAccessStreamWithContentType streamRandom = await rass.OpenReadAsync();

                Stream tempStream = streamRandom.GetInputStreamAt(0).AsStreamForRead();
                //
                MemoryStream ms = new MemoryStream();
                await tempStream.CopyToAsync(ms);

                byte[] bytes = ms.ToArray();
                tempStream = new MemoryStream(bytes);
                //
                var randomAccessStream = new InMemoryRandomAccessStream();
                var outputStream       = randomAccessStream.GetOutputStreamAt(0);
                await RandomAccessStream.CopyAsync(tempStream.AsInputStream(), outputStream);

                /*
                 * try
                 * {
                 *  await CreateGifBitFrame(randomAccessStream);
                 *  PlayGif();
                 * }
                 * catch
                 * {
                 *  //var stop = this.Stop;
                 *  //this.Stop = true;
                 *  //bitFrame.Clear();
                 *  //randomAccessStream.Seek(0);
                 *  //randomAccessStream.FlushAsync().GetResults();
                 *  //bmp.SetSource(randomAccessStream);
                 *  //imageGif.Source = bmp;
                 *  //this.Stop = stop;
                 *
                 *  JpegAndPng(randomAccessStream);
                 * }
                 */

                //判断并设置图片类型
                ImageType type = ImageTypeCheck.CheckImageType(bytes);
                switch (type)
                {
                case ImageType.GIF:
                {
                    await CreateGifBitFrame(randomAccessStream);

                    PlayGif();
                    break;
                }

                case ImageType.JPG:
                {
                    JpegAndPng(randomAccessStream);
                    break;
                }

                case ImageType.PNG:
                {
                    JpegAndPng(randomAccessStream);
                    break;
                }

                default:
                {
                    JpegAndPng(randomAccessStream);
                    break;
                }
                }
            }
            catch
            {
                BitmapImage bi = new BitmapImage();
                if (regex.IsMatch(this.Source))
                {
                    bi.UriSource = new Uri(uri, UriKind.RelativeOrAbsolute);
                }
                else
                {
                    bi.UriSource = new Uri(this.baseUri, uri);
                }
                this.imageGifGrid.Children.Clear();
                //优化
                this.imageList.Clear();
                this.bitmapImageList.Clear();

                Image imageGif = new Image();
                imageGif.Source = bi;
                this.imageGifGrid.Children.Add(imageGif);
            }
        }
コード例 #7
0
        /// <summary>
        /// 输入Uri开始播放Gif图片
        /// </summary>
        /// <param name="Uri"></param>
        private async void Start(string uri)
        {
            InMemoryRandomAccessStream randomAccessStream = null;

            if (this.ImageDownLoadProgress != null)
            {
                this.ImageDownLoadProgress(0);
            }

            if (this.IsAnimation)
            {
                this.imageGifGrid.Opacity = 0;
                CreateAnimationBegin();
            }
            else
            {
                this.imageGifGrid.Opacity = 1.0;
            }

            //优化网络流量和用户体验
            if (GifCacheDictionaryHelper.Instance.SelectUriToBytes(this.Source) == null)
            {
                var   reg   = @"http(s)?://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?";
                Regex regex = new Regex(reg, RegexOptions.IgnoreCase);
                RandomAccessStreamReference rass = null;
                if (regex.IsMatch(this.Source))
                {
                    rass = RandomAccessStreamReference.CreateFromUri(new Uri(uri, UriKind.RelativeOrAbsolute));
                }
                else
                {
                    try
                    {
                        //本地的Uri
                        //rass = RandomAccessStreamReference.CreateFromUri(new Uri(this.BaseUri, uri));
                        rass = RandomAccessStreamReference.CreateFromUri(new Uri(this.baseUri, uri));
                        //var packageLocation = Windows.ApplicationModel.Package.Current.InstalledLocation;
                        //var ss = await packageLocation.GetBasicPropertiesAsync();
                        //var imagesFolder = await packageLocation.GetFolderAsync("Images");
                        //StorageFile file = await imagesFolder.GetFileAsync("amy.jpg");
                        //rass = RandomAccessStreamReference.CreateFromFile(file);
                    }
                    catch (Exception)
                    {
                        Debug.WriteLine("不是一个有效的Uri");
                    }
                }
                if (this.ImageDownLoadProgress != null)
                {
                    for (int i = 0; i <= 7; i++)
                    {
                        this.ImageDownLoadProgress(i * 10);
                        await Task.Delay(TimeSpan.FromMilliseconds(100));
                    }
                }
                try
                {
                    IRandomAccessStreamWithContentType streamRandom = null;
                    try
                    {
                        streamRandom = await rass.OpenReadAsync();
                    }
                    catch
                    {
                        if (ImageFailed != null)
                        {
                            ImageFailed(this, null);
                        }
                        return;
                    }
                    Stream tempStream = streamRandom.GetInputStreamAt(0).AsStreamForRead();
                    //为了能判断文件头做了一个流拷贝,保存了一份字节数组
                    MemoryStream ms = new MemoryStream();
                    await tempStream.CopyToAsync(ms);

                    //byte[] bytes = ms.ToArray();
                    bytes      = ms.ToArray();
                    tempStream = new MemoryStream(bytes);
                    //
                    randomAccessStream = new InMemoryRandomAccessStream();
                    var outputStream = randomAccessStream.GetOutputStreamAt(0);
                    await RandomAccessStream.CopyAsync(tempStream.AsInputStream(), outputStream);

                    /*
                     * try
                     * {
                     *  await CreateGifBitFrame(randomAccessStream);
                     *  PlayGif();
                     * }
                     * catch
                     * {
                     *  //var stop = this.Stop;
                     *  //this.Stop = true;
                     *  //bitFrame.Clear();
                     *  //randomAccessStream.Seek(0);
                     *  //randomAccessStream.FlushAsync().GetResults();
                     *  //bmp.SetSource(randomAccessStream);
                     *  //imageGif.Source = bmp;
                     *  //this.Stop = stop;
                     *
                     *  JpegAndPng(randomAccessStream);
                     * }
                     */

                    //判断并设置图片类型
                    ImageType type = ImageTypeCheck.CheckImageType(bytes);
                    if (this.ImageDownLoadProgress != null)
                    {
                        this.ImageDownLoadProgress(80);
                        await Task.Delay(TimeSpan.FromMilliseconds(100));
                    }
                    switch (type)
                    {
                    case ImageType.GIF:
                    {
                        using (await asyncLock.LockAsync())
                        {
                            //*优化网络流量和用户体验
                            GifCacheDictionaryHelper.Instance.AddUriToBytes(this.Source, bytes);
                            //*
                            viewBox.Stretch = this.Stretch;
                            await CreateGifBitFrame(randomAccessStream);

                            PlayGif();
                        }
                        break;
                    }

                    case ImageType.JPG:
                    {
                        viewBox.Stretch = Windows.UI.Xaml.Media.Stretch.None;
                        JpegAndPng(randomAccessStream);
                        break;
                    }

                    case ImageType.PNG:
                    {
                        viewBox.Stretch = Windows.UI.Xaml.Media.Stretch.None;
                        JpegAndPng(randomAccessStream);
                        break;
                    }

                    default:
                    {
                        viewBox.Stretch = Windows.UI.Xaml.Media.Stretch.None;
                        JpegAndPng(randomAccessStream);
                        break;
                    }
                    }
                }
                catch
                {
                    //GIF错误数据的流程
                    GifCacheDictionaryHelper.Instance.DelectUriToBytes(this.Source);
                    var ss = this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
                    {
                        BitmapImage bi       = new BitmapImage();
                        bi.DownloadProgress -= bi_DownloadProgress;
                        bi.DownloadProgress += bi_DownloadProgress;
                        bi.ImageOpened      -= bi_ImageOpened;
                        bi.ImageOpened      += bi_ImageOpened;
                        bi.ImageFailed      -= bi_ImageFailed;
                        bi.ImageFailed      += bi_ImageFailed;
                        //if (regex.IsMatch(this.Source))
                        //{
                        //    bi.UriSource = new Uri(uri, UriKind.RelativeOrAbsolute);
                        //}
                        //else
                        //{
                        //    bi.UriSource = new Uri(this.baseUri, uri);
                        //}

                        randomAccessStream.Seek(0);
                        randomAccessStream.FlushAsync();
                        //await bi.SetSourceAsync(randomAccessStream);
                        bi.SetSource(randomAccessStream);

                        this.imageGifGrid.Children.Clear();
                        //优化
                        this.imageList.Clear();
                        this.bitmapImageList.Clear();
                        this.bitFrame.Clear();

                        viewBox.Stretch              = Windows.UI.Xaml.Media.Stretch.None;
                        Image imageGif               = new Image();
                        imageGif.Source              = null;
                        imageGif.Stretch             = this.Stretch;
                        imageGif.HorizontalAlignment = Windows.UI.Xaml.HorizontalAlignment.Stretch;
                        imageGif.VerticalAlignment   = Windows.UI.Xaml.VerticalAlignment.Stretch;
                        if (!double.IsNaN(this.width) && this.width != 0.0)
                        {
                            imageGif.Width = this.width;
                        }
                        if (!double.IsNaN(this.height) && this.height != 0.0)
                        {
                            imageGif.Height = this.height;
                        }
                        imageGif.Source = bi;
                        this.imageGifGrid.Children.Add(imageGif);
                    });
                    //ss.Completed = delegate(IAsyncAction asyncAction, AsyncStatus asyncStatus)
                    //{
                    //    ss.Close();
                    //};
                    this.Stop = catchStop;
                }
            }
            else
            {
                using (await asyncLock.LockAsync())
                {
                    if (this.ImageDownLoadProgress != null)
                    {
                        this.ImageDownLoadProgress(80);
                    }
                    bytes = GifCacheDictionaryHelper.Instance.SelectUriToBytes(this.Source).Bytes;
                    Stream tempStream = new MemoryStream(bytes);
                    var    inMemoryRandomAccessStream = new InMemoryRandomAccessStream();
                    var    outputStream = inMemoryRandomAccessStream.GetOutputStreamAt(0);
                    await RandomAccessStream.CopyAsync(tempStream.AsInputStream(), outputStream);
                    await CreateGifBitFrame(inMemoryRandomAccessStream);

                    PlayGif();
                }
            }
        }
コード例 #8
0
        /// <summary>
        /// 保存图片到任意的文件夹
        /// </summary>
        /// <returns>保存成功返回true,失败返回false</returns>
        public async Task <bool> SaveFileImage()
        {
            if (!IsOnlineImage)
            {
                if (imageCacheSerivce != null && chip != null)
                {
                    try
                    {
                        StorageFile    storageFile = imageCacheSerivce.PickFile(chip).Result as StorageFile;
                        FileSavePicker savePicker  = new FileSavePicker();
                        savePicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
                        savePicker.FileTypeChoices.Add("图片类型", new List <string>()
                        {
                            ".jpg"
                        });
                        savePicker.SuggestedFileName = storageFile.Name;
                        StorageFile file = await savePicker.PickSaveFileAsync();

                        if (file != null)
                        {
                            CachedFileManager.DeferUpdates(file);
                            await storageFile.CopyAndReplaceAsync(file);//, file.Name, NameCollisionOption.GenerateUniqueName);

                            FileUpdateStatus status = await CachedFileManager.CompleteUpdatesAsync(file);

                            if (status == FileUpdateStatus.Complete)
                            {
                                return(true);
                            }
                            else
                            {
                                return(false);
                            }
                        }
                        else
                        {
                            return(false);
                        }
                    }
                    catch
                    {
                        return(false);
                    }
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                try
                {
                    StorageFile storageFile = null;
                    var         rass        = RandomAccessStreamReference.CreateFromUri(new Uri(this.Source, UriKind.RelativeOrAbsolute));
                    IRandomAccessStreamWithContentType streamRandom = await rass.OpenReadAsync();

                    using (Stream tempStream = streamRandom.GetInputStreamAt(0).AsStreamForRead())
                    {
                        MemoryStream ms = new MemoryStream();
                        await tempStream.CopyToAsync(ms);

                        byte[] bytes = ms.ToArray();

                        storageFile = await ApplicationData.Current.TemporaryFolder.CreateFileAsync(ApiHelper.ComputeMD5(this.Source), CreationCollisionOption.ReplaceExisting);

                        await FileIO.WriteBytesAsync(storageFile, bytes);
                    }

                    FileSavePicker savePicker = new FileSavePicker();
                    savePicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
                    savePicker.FileTypeChoices.Add("图片类型", new List <string>()
                    {
                        ".jpg"
                    });

                    savePicker.SuggestedFileName = storageFile.Name;
                    StorageFile file = await savePicker.PickSaveFileAsync();

                    if (file != null)
                    {
                        CachedFileManager.DeferUpdates(file);
                        await storageFile.CopyAndReplaceAsync(file);//, file.Name, NameCollisionOption.GenerateUniqueName);

                        FileUpdateStatus status = await CachedFileManager.CompleteUpdatesAsync(file);

                        if (status == FileUpdateStatus.Complete)
                        {
                            return(true);
                        }
                        else
                        {
                            return(false);
                        }
                    }
                    else
                    {
                        return(false);
                    }
                }
                catch
                {
                    return(false);
                }
            }
        }
コード例 #9
0
        /// <summary>
        /// 保存图片到系统的文件夹
        /// </summary>
        /// <returns>保存成功返回true,失败返回false</returns>
        public async Task <bool> SaveImage(string fileName = "")
        {
            if (!IsOnlineImage)
            {
                if (imageCacheSerivce != null && chip != null)
                {
                    try
                    {
                        StorageFolder storageFolder = KnownFolders.PicturesLibrary;
                        StorageFile   storageFile   = imageCacheSerivce.PickFile(chip).Result as StorageFile;
                        if (string.IsNullOrEmpty(fileName))
                        {
                            await storageFile.CopyAsync(storageFolder, storageFile.Name + ".jpg", NameCollisionOption.GenerateUniqueName);
                        }
                        else
                        {
                            await storageFile.CopyAsync(storageFolder, fileName + ".jpg", NameCollisionOption.GenerateUniqueName);
                        }
                        return(true);
                    }
                    catch
                    {
                        return(false);
                    }
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                try
                {
                    StorageFolder storageFolder = KnownFolders.PicturesLibrary;
                    StorageFile   storageFile   = null;
                    var           rass          = RandomAccessStreamReference.CreateFromUri(new Uri(this.Source, UriKind.RelativeOrAbsolute));
                    IRandomAccessStreamWithContentType streamRandom = await rass.OpenReadAsync();

                    using (Stream tempStream = streamRandom.GetInputStreamAt(0).AsStreamForRead())
                    {
                        MemoryStream ms = new MemoryStream();
                        await tempStream.CopyToAsync(ms);

                        byte[] bytes = ms.ToArray();

                        storageFile = await ApplicationData.Current.TemporaryFolder.CreateFileAsync(ApiHelper.ComputeMD5(this.Source), CreationCollisionOption.ReplaceExisting);

                        await FileIO.WriteBytesAsync(storageFile, bytes);
                    }

                    if (string.IsNullOrEmpty(fileName))
                    {
                        await storageFile.CopyAsync(storageFolder, storageFile.Name + ".jpg", NameCollisionOption.GenerateUniqueName);
                    }
                    else
                    {
                        await storageFile.CopyAsync(storageFolder, fileName + ".jpg", NameCollisionOption.GenerateUniqueName);
                    }
                    return(true);
                }
                catch
                {
                    return(false);
                }
            }
        }