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); }
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); }
/// <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; } }
/// <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/")); } }
//显示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(); }
/// <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); } }
/// <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(); } } }
/// <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); } } }
/// <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); } } }