private void AutoOptimizeButton_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e) { if (FilterImage != null) { FilterImage.Dispose(); FilterImage = null; FilterBackupImage.Dispose(); FilterBackupImage = null; } AlphaSlider.ValueChanged -= AlphaSlider_ValueChanged; BetaSlider.ValueChanged -= BetaSlider_ValueChanged; AlphaSlider.Value = 1; BetaSlider.Value = 0; AlphaSlider.ValueChanged += AlphaSlider_ValueChanged; BetaSlider.ValueChanged += BetaSlider_ValueChanged; FilterImage = ComputerVisionProvider.AutoColorEnhancement(OriginImage); FilterBackupImage = SoftwareBitmap.Copy(FilterImage); WriteableBitmap WBitmap = new WriteableBitmap(OriginImage.PixelWidth, OriginImage.PixelHeight); FilterImage.CopyToBuffer(WBitmap.PixelBuffer); Cropper.Source = WBitmap; using (SoftwareBitmap Histogram = ComputerVisionProvider.CalculateHistogram(FilterImage)) { WriteableBitmap HBitmap = new WriteableBitmap(Histogram.PixelWidth, Histogram.PixelHeight); Histogram.CopyToBuffer(HBitmap.PixelBuffer); HistogramImage.Source = HBitmap; } ResetButton.IsEnabled = true; }
private void FlipButton_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e) { if (FilterImage == null) { SoftwareBitmap FlipImage = ComputerVisionProvider.FlipEffect(OriginImage, false); OriginImage.Dispose(); OriginImage = FlipImage; WriteableBitmap WBitmap = new WriteableBitmap(OriginImage.PixelWidth, OriginImage.PixelHeight); OriginImage.CopyToBuffer(WBitmap.PixelBuffer); Cropper.Source = WBitmap; } else { SoftwareBitmap FlipImage = ComputerVisionProvider.FlipEffect(OriginImage, false); OriginImage.Dispose(); OriginImage = FlipImage; SoftwareBitmap FilterFlipImage = ComputerVisionProvider.FlipEffect(FilterImage, false); FilterImage.Dispose(); FilterImage = FilterFlipImage; WriteableBitmap WBitmap = new WriteableBitmap(FilterImage.PixelWidth, FilterImage.PixelHeight); FilterImage.CopyToBuffer(WBitmap.PixelBuffer); Cropper.Source = WBitmap; } ResetButton.IsEnabled = true; }
public static async Task <ProgramPickerItem> CreateAsync(AppInfo App) { try { using (IRandomAccessStreamWithContentType LogoStream = await App.DisplayInfo.GetLogo(new Windows.Foundation.Size(128, 128)).OpenReadAsync()) { BitmapDecoder Decoder = await BitmapDecoder.CreateAsync(LogoStream); using (SoftwareBitmap SBitmap = await Decoder.GetSoftwareBitmapAsync(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied)) using (SoftwareBitmap ResizeBitmap = ComputerVisionProvider.ResizeToActual(SBitmap)) using (InMemoryRandomAccessStream Stream = new InMemoryRandomAccessStream()) { BitmapEncoder Encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, Stream); Encoder.SetSoftwareBitmap(ResizeBitmap); await Encoder.FlushAsync(); BitmapImage Logo = new BitmapImage(); await Logo.SetSourceAsync(Stream); return(new ProgramPickerItem(Logo, App.DisplayInfo.DisplayName, App.DisplayInfo.Description, App.PackageFamilyName)); } } } catch (Exception ex) { LogTracer.Log(ex, "An exception was threw when getting or processing App Logo"); return(new ProgramPickerItem(App.DisplayInfo.DisplayName, App.DisplayInfo.Description, App.PackageFamilyName)); } }
private void RotationButton_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e) { if (FilterImage == null) { SoftwareBitmap RotatedImage = ComputerVisionProvider.RotateEffect(OriginImage, 90); WriteableBitmap WBitmap = new WriteableBitmap(RotatedImage.PixelWidth, RotatedImage.PixelHeight); RotatedImage.CopyToBuffer(WBitmap.PixelBuffer); Cropper.Source = WBitmap; OriginImage.Dispose(); OriginImage = RotatedImage; } else { SoftwareBitmap OringinRotatedImage = ComputerVisionProvider.RotateEffect(OriginImage, 90); OriginImage.Dispose(); OriginImage = OringinRotatedImage; SoftwareBitmap RotatedImage = ComputerVisionProvider.RotateEffect(FilterImage, 90); WriteableBitmap WBitmap = new WriteableBitmap(RotatedImage.PixelWidth, RotatedImage.PixelHeight); RotatedImage.CopyToBuffer(WBitmap.PixelBuffer); Cropper.Source = WBitmap; FilterImage.Dispose(); FilterImage = RotatedImage; } ResetButton.IsEnabled = true; }
/// <summary> /// 根据RotateAngle的值来旋转图片 /// </summary> /// <returns></returns> public async Task <SoftwareBitmap> GenerateImageWithRotation() { try { if ((await PhotoFile.GetStorageItem().ConfigureAwait(true)) is StorageFile File) { using (IRandomAccessStream stream = await File.OpenAsync(FileAccessMode.Read)) { BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream); switch (RotateAngle % 360) { case 0: { return(await decoder.GetSoftwareBitmapAsync(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied)); } case 90: { using (SoftwareBitmap Origin = await decoder.GetSoftwareBitmapAsync(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied)) { return(ComputerVisionProvider.RotateEffect(Origin, 90)); } } case 180: { using (SoftwareBitmap Origin = await decoder.GetSoftwareBitmapAsync(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied)) { return(ComputerVisionProvider.RotateEffect(Origin, 180)); } } case 270: { using (SoftwareBitmap Origin = await decoder.GetSoftwareBitmapAsync(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied)) { return(ComputerVisionProvider.RotateEffect(Origin, -90)); } } default: { return(null); } } } } else { return(null); } } catch { return(null); } }
private async void BrowserApp_Click(object sender, RoutedEventArgs e) { FileOpenPicker Picker = new FileOpenPicker { SuggestedStartLocation = PickerLocationId.ComputerFolder, ViewMode = PickerViewMode.List }; Picker.FileTypeFilter.Add(".exe"); Picker.FileTypeFilter.Add(".lnk"); if ((await Picker.PickSingleFileAsync()) is StorageFile ExecuteFile) { IDictionary <string, object> PropertiesDictionary = await ExecuteFile.Properties.RetrievePropertiesAsync(new string[] { "System.FileDescription" }); string ExtraAppName = string.Empty; if (PropertiesDictionary.TryGetValue("System.FileDescription", out object Description)) { ExtraAppName = Convert.ToString(Description); } if (await ExecuteFile.GetThumbnailRawStreamAsync().ConfigureAwait(true) is IRandomAccessStream ThumbnailStream) { BitmapDecoder Decoder = await BitmapDecoder.CreateAsync(ThumbnailStream); using (SoftwareBitmap SBitmap = await Decoder.GetSoftwareBitmapAsync(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied)) using (SoftwareBitmap ResizeBitmap = ComputerVisionProvider.ResizeToActual(SBitmap)) using (InMemoryRandomAccessStream ResizeBitmapStream = new InMemoryRandomAccessStream()) { BitmapEncoder Encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, ResizeBitmapStream); Encoder.SetSoftwareBitmap(ResizeBitmap); await Encoder.FlushAsync(); BitmapImage ThumbnailBitmap = new BitmapImage(); await ThumbnailBitmap.SetSourceAsync(ResizeBitmapStream); ProgramCollection.Insert(0, new ProgramPickerItem(ThumbnailBitmap, string.IsNullOrEmpty(ExtraAppName) ? ExecuteFile.DisplayName : ExtraAppName, Globalization.GetString("Application_Admin_Name"), ExecuteFile.Path)); } } else { ProgramCollection.Insert(0, new ProgramPickerItem(new BitmapImage(AppThemeController.Current.Theme == ElementTheme.Dark ? new Uri("ms-appx:///Assets/Page_Solid_White.png") : new Uri("ms-appx:///Assets/Page_Solid_Black.png")), string.IsNullOrEmpty(ExtraAppName) ? ExecuteFile.DisplayName : ExtraAppName, Globalization.GetString("Application_Admin_Name"), ExecuteFile.Path)); } OtherProgramList.SelectedIndex = 0; await SQLite.Current.SetProgramPickerRecordAsync(new AssociationPackage(OpenFile.Type, ExecuteFile.Path, true)).ConfigureAwait(false); } }
private void BetaSlider_ValueChanged(object sender, Windows.UI.Xaml.Controls.Primitives.RangeBaseValueChangedEventArgs e) { if (OriginImage != null) { ResetButton.IsEnabled = true; if (FilterImage == null) { OriginImage.Dispose(); OriginImage = ComputerVisionProvider.AdjustBrightnessContrast(OriginBackupImage, AlphaSlider.Value, e.NewValue); WriteableBitmap WBitmap = new WriteableBitmap(OriginImage.PixelWidth, OriginImage.PixelHeight); OriginImage.CopyToBuffer(WBitmap.PixelBuffer); Cropper.Source = WBitmap; using (SoftwareBitmap Histogram = ComputerVisionProvider.CalculateHistogram(OriginImage)) { WriteableBitmap HBitmap = new WriteableBitmap(Histogram.PixelWidth, Histogram.PixelHeight); Histogram.CopyToBuffer(HBitmap.PixelBuffer); HistogramImage.Source = HBitmap; } } else { FilterImage.Dispose(); FilterImage = ComputerVisionProvider.AdjustBrightnessContrast(FilterBackupImage, AlphaSlider.Value, e.NewValue); WriteableBitmap WBitmap = new WriteableBitmap(FilterImage.PixelWidth, FilterImage.PixelHeight); FilterImage.CopyToBuffer(WBitmap.PixelBuffer); Cropper.Source = WBitmap; using (SoftwareBitmap Histogram = ComputerVisionProvider.CalculateHistogram(FilterImage)) { WriteableBitmap HBitmap = new WriteableBitmap(Histogram.PixelWidth, Histogram.PixelHeight); Histogram.CopyToBuffer(HBitmap.PixelBuffer); HistogramImage.Source = HBitmap; } } } }
private void ResetButton_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e) { AspList.SelectedIndex = 0; ResetButton.IsEnabled = false; OriginImage.Dispose(); OriginImage = SoftwareBitmap.Copy(OriginBackupImage); WriteableBitmap WBitmap = new WriteableBitmap(OriginImage.PixelWidth, OriginImage.PixelHeight); OriginImage.CopyToBuffer(WBitmap.PixelBuffer); Cropper.Source = WBitmap; using (SoftwareBitmap Histogram = ComputerVisionProvider.CalculateHistogram(OriginImage)) { WriteableBitmap HBitmap = new WriteableBitmap(Histogram.PixelWidth, Histogram.PixelHeight); Histogram.CopyToBuffer(HBitmap.PixelBuffer); HistogramImage.Source = HBitmap; } FilterImage?.Dispose(); FilterImage = null; FilterBackupImage?.Dispose(); FilterBackupImage = null; AlphaSlider.ValueChanged -= AlphaSlider_ValueChanged; BetaSlider.ValueChanged -= BetaSlider_ValueChanged; FilterGrid.SelectionChanged -= FilterGrid_SelectionChanged; FilterGrid.SelectedIndex = 0; FilterGrid.SelectionChanged += FilterGrid_SelectionChanged; AlphaSlider.Value = 1; BetaSlider.Value = 0; AlphaSlider.ValueChanged += AlphaSlider_ValueChanged; BetaSlider.ValueChanged += BetaSlider_ValueChanged; Cropper.Reset(); }
private async Task AddEffectsToPane() { using (SoftwareBitmap ResizedImage = ComputerVisionProvider.GenenateResizedThumbnail(OriginImage, 100, 100)) { SoftwareBitmapSource Source1 = new SoftwareBitmapSource(); await Source1.SetBitmapAsync(ResizedImage); FilterCollection.Add(new FilterItem(Source1, Globalization.GetString("CropperPage_Filter_Type_1"), FilterType.Origin)); using (SoftwareBitmap Bitmap2 = ComputerVisionProvider.InvertEffect(ResizedImage)) { SoftwareBitmapSource Source2 = new SoftwareBitmapSource(); await Source2.SetBitmapAsync(Bitmap2); FilterCollection.Add(new FilterItem(Source2, Globalization.GetString("CropperPage_Filter_Type_2"), FilterType.Invert)); } using (SoftwareBitmap Bitmap3 = ComputerVisionProvider.GrayEffect(ResizedImage)) { SoftwareBitmapSource Source3 = new SoftwareBitmapSource(); await Source3.SetBitmapAsync(Bitmap3); FilterCollection.Add(new FilterItem(Source3, Globalization.GetString("CropperPage_Filter_Type_3"), FilterType.Gray)); } using (SoftwareBitmap Bitmap4 = ComputerVisionProvider.ThresholdEffect(ResizedImage)) { SoftwareBitmapSource Source4 = new SoftwareBitmapSource(); await Source4.SetBitmapAsync(Bitmap4); FilterCollection.Add(new FilterItem(Source4, Globalization.GetString("CropperPage_Filter_Type_4"), FilterType.Threshold)); } using (SoftwareBitmap Bitmap5 = ComputerVisionProvider.SepiaEffect(ResizedImage)) { SoftwareBitmapSource Source5 = new SoftwareBitmapSource(); await Source5.SetBitmapAsync(Bitmap5); FilterCollection.Add(new FilterItem(Source5, Globalization.GetString("CropperPage_Filter_Type_5"), FilterType.Sepia)); } using (SoftwareBitmap Bitmap6 = ComputerVisionProvider.MosaicEffect(ResizedImage)) { SoftwareBitmapSource Source6 = new SoftwareBitmapSource(); await Source6.SetBitmapAsync(Bitmap6); FilterCollection.Add(new FilterItem(Source6, Globalization.GetString("CropperPage_Filter_Type_6"), FilterType.Mosaic)); } using (SoftwareBitmap Bitmap7 = ComputerVisionProvider.SketchEffect(ResizedImage)) { SoftwareBitmapSource Source7 = new SoftwareBitmapSource(); await Source7.SetBitmapAsync(Bitmap7); FilterCollection.Add(new FilterItem(Source7, Globalization.GetString("CropperPage_Filter_Type_7"), FilterType.Sketch)); } using (SoftwareBitmap Bitmap8 = ComputerVisionProvider.GaussianBlurEffect(ResizedImage)) { SoftwareBitmapSource Source8 = new SoftwareBitmapSource(); await Source8.SetBitmapAsync(Bitmap8); FilterCollection.Add(new FilterItem(Source8, Globalization.GetString("CropperPage_Filter_Type_8"), FilterType.GaussianBlur)); } using (SoftwareBitmap Bitmap9 = ComputerVisionProvider.OilPaintingEffect(ResizedImage)) { SoftwareBitmapSource Source9 = new SoftwareBitmapSource(); await Source9.SetBitmapAsync(Bitmap9); FilterCollection.Add(new FilterItem(Source9, Globalization.GetString("CropperPage_Filter_Type_9"), FilterType.OilPainting)); } } FilterGrid.SelectedIndex = 0; FilterGrid.SelectionChanged += FilterGrid_SelectionChanged; using (SoftwareBitmap Histogram = ComputerVisionProvider.CalculateHistogram(OriginImage)) { SoftwareBitmapSource Source = new SoftwareBitmapSource(); await Source.SetBitmapAsync(Histogram); HistogramImage.Source = Source; } }
private void FilterGrid_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (FilterGrid.SelectedItem is FilterItem Item) { if (FilterImage != null) { FilterImage.Dispose(); FilterImage = null; FilterBackupImage.Dispose(); FilterBackupImage = null; } AlphaSlider.ValueChanged -= AlphaSlider_ValueChanged; BetaSlider.ValueChanged -= BetaSlider_ValueChanged; AlphaSlider.Value = 1; BetaSlider.Value = 0; AlphaSlider.ValueChanged += AlphaSlider_ValueChanged; BetaSlider.ValueChanged += BetaSlider_ValueChanged; switch (Item.Type) { case FilterType.Origin: { WriteableBitmap WBitmap = new WriteableBitmap(OriginImage.PixelWidth, OriginImage.PixelHeight); OriginImage.CopyToBuffer(WBitmap.PixelBuffer); Cropper.Source = WBitmap; break; } case FilterType.Invert: { using (SoftwareBitmap InvertImage = ComputerVisionProvider.InvertEffect(OriginImage)) { FilterImage = SoftwareBitmap.Copy(InvertImage); FilterBackupImage = SoftwareBitmap.Copy(FilterImage); WriteableBitmap WBitmap = new WriteableBitmap(InvertImage.PixelWidth, InvertImage.PixelHeight); InvertImage.CopyToBuffer(WBitmap.PixelBuffer); Cropper.Source = WBitmap; } break; } case FilterType.Gray: { using (SoftwareBitmap GrayImage = ComputerVisionProvider.GrayEffect(OriginImage)) { FilterImage = SoftwareBitmap.Copy(GrayImage); FilterBackupImage = SoftwareBitmap.Copy(FilterImage); WriteableBitmap WBitmap = new WriteableBitmap(GrayImage.PixelWidth, GrayImage.PixelHeight); GrayImage.CopyToBuffer(WBitmap.PixelBuffer); Cropper.Source = WBitmap; } break; } case FilterType.Threshold: { using (SoftwareBitmap ThresholdImage = ComputerVisionProvider.ThresholdEffect(OriginImage)) { FilterImage = SoftwareBitmap.Copy(ThresholdImage); FilterBackupImage = SoftwareBitmap.Copy(FilterImage); WriteableBitmap WBitmap = new WriteableBitmap(ThresholdImage.PixelWidth, ThresholdImage.PixelHeight); ThresholdImage.CopyToBuffer(WBitmap.PixelBuffer); Cropper.Source = WBitmap; } break; } case FilterType.Sketch: { using (SoftwareBitmap SketchImage = ComputerVisionProvider.SketchEffect(OriginImage)) { FilterImage = SoftwareBitmap.Copy(SketchImage); FilterBackupImage = SoftwareBitmap.Copy(FilterImage); WriteableBitmap WBitmap = new WriteableBitmap(SketchImage.PixelWidth, SketchImage.PixelHeight); SketchImage.CopyToBuffer(WBitmap.PixelBuffer); Cropper.Source = WBitmap; } break; } case FilterType.GaussianBlur: { using (SoftwareBitmap GaussianBlurImage = ComputerVisionProvider.GaussianBlurEffect(OriginImage)) { FilterImage = SoftwareBitmap.Copy(GaussianBlurImage); FilterBackupImage = SoftwareBitmap.Copy(FilterImage); WriteableBitmap WBitmap = new WriteableBitmap(GaussianBlurImage.PixelWidth, GaussianBlurImage.PixelHeight); GaussianBlurImage.CopyToBuffer(WBitmap.PixelBuffer); Cropper.Source = WBitmap; } break; } case FilterType.Sepia: { using (SoftwareBitmap SepiaImage = ComputerVisionProvider.SepiaEffect(OriginImage)) { FilterImage = SoftwareBitmap.Copy(SepiaImage); FilterBackupImage = SoftwareBitmap.Copy(FilterImage); WriteableBitmap WBitmap = new WriteableBitmap(SepiaImage.PixelWidth, SepiaImage.PixelHeight); SepiaImage.CopyToBuffer(WBitmap.PixelBuffer); Cropper.Source = WBitmap; } break; } case FilterType.OilPainting: { using (SoftwareBitmap OilPaintingImage = ComputerVisionProvider.OilPaintingEffect(OriginImage)) { FilterImage = SoftwareBitmap.Copy(OilPaintingImage); FilterBackupImage = SoftwareBitmap.Copy(FilterImage); WriteableBitmap WBitmap = new WriteableBitmap(OilPaintingImage.PixelWidth, OilPaintingImage.PixelHeight); OilPaintingImage.CopyToBuffer(WBitmap.PixelBuffer); Cropper.Source = WBitmap; } break; } case FilterType.Mosaic: { using (SoftwareBitmap MosaicImage = ComputerVisionProvider.MosaicEffect(OriginImage)) { FilterImage = SoftwareBitmap.Copy(MosaicImage); FilterBackupImage = SoftwareBitmap.Copy(FilterImage); WriteableBitmap WBitmap = new WriteableBitmap(MosaicImage.PixelWidth, MosaicImage.PixelHeight); MosaicImage.CopyToBuffer(WBitmap.PixelBuffer); Cropper.Source = WBitmap; } break; } } using (SoftwareBitmap Histogram = ComputerVisionProvider.CalculateHistogram(Item.Type == FilterType.Origin ? OriginImage : FilterImage)) { WriteableBitmap HBitmap = new WriteableBitmap(Histogram.PixelWidth, Histogram.PixelHeight); Histogram.CopyToBuffer(HBitmap.PixelBuffer); HistogramImage.Source = HBitmap; } ResetButton.IsEnabled = true; } }
private async void UWPPickerTip_ActionButtonClick(Microsoft.UI.Xaml.Controls.TeachingTip sender, object args) { try { if (PackageListView.SelectedItem is InstalledApplication Package) { sender.IsOpen = false; PickAppFlyout.Hide(); DisplayName.Text = Package.AppName; Protocol.Text = Package.AppFamilyName; Icon.Source = Package.Logo; StorageFile FileThumbnail = await ApplicationData.Current.TemporaryFolder.CreateFileAsync("FileThumbnail.png", CreationCollisionOption.ReplaceExisting); if (Package.CreateStreamFromLogoData() is Stream LogoStream) { try { BitmapDecoder Decoder = await BitmapDecoder.CreateAsync(LogoStream.AsRandomAccessStream()); using (SoftwareBitmap SBitmap = await Decoder.GetSoftwareBitmapAsync(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied)) using (SoftwareBitmap ResizeBitmap = ComputerVisionProvider.ResizeToActual(SBitmap)) using (InMemoryRandomAccessStream ResizeBitmapStream = new InMemoryRandomAccessStream()) { BitmapEncoder Encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, ResizeBitmapStream); Encoder.SetSoftwareBitmap(ResizeBitmap); await Encoder.FlushAsync(); BitmapImage Source = new BitmapImage(); Icon.Source = Source; await Source.SetSourceAsync(ResizeBitmapStream); ResizeBitmapStream.Seek(0); using (Stream FileStream = await FileThumbnail.OpenStreamForWriteAsync()) { await ResizeBitmapStream.AsStreamForRead().CopyToAsync(FileStream); } } } finally { LogoStream.Dispose(); } } else { Uri PageUri = AppThemeController.Current.Theme == ElementTheme.Dark ? new Uri("ms-appx:///Assets/Page_Solid_White.png") : new Uri("ms-appx:///Assets/Page_Solid_Black.png"); StorageFile PageFile = await StorageFile.GetFileFromApplicationUriAsync(PageUri); using (IRandomAccessStream PageStream = await PageFile.OpenAsync(FileAccessMode.Read)) { BitmapImage Image = new BitmapImage(); Icon.Source = Image; await Image.SetSourceAsync(PageStream); PageStream.Seek(0); using (Stream TransformStream = PageStream.AsStreamForRead()) using (Stream FileStream = await FileThumbnail.OpenStreamForWriteAsync()) { await TransformStream.CopyToAsync(FileStream); } } } ImageFile = FileThumbnail; } } catch (Exception ex) { LogTracer.Log(ex); FailureTips.IsOpen = true; } }
private async void PickWin32_Click(object sender, RoutedEventArgs e) { try { FileOpenPicker Picker = new FileOpenPicker { SuggestedStartLocation = PickerLocationId.ComputerFolder, ViewMode = PickerViewMode.List }; Picker.FileTypeFilter.Add(".exe"); Picker.FileTypeFilter.Add(".lnk"); Picker.FileTypeFilter.Add(".msc"); if (await Picker.PickSingleFileAsync() is StorageFile ExecuteFile) { IDictionary <string, object> PropertiesDictionary = await ExecuteFile.Properties.RetrievePropertiesAsync(new string[] { "System.FileDescription" }); string ExtraAppName = string.Empty; if (PropertiesDictionary.TryGetValue("System.FileDescription", out object DescriptionRaw)) { ExtraAppName = Convert.ToString(DescriptionRaw); } DisplayName.Text = string.IsNullOrEmpty(ExtraAppName) ? ExecuteFile.DisplayName : ExtraAppName; Protocol.Text = ExecuteFile.Path; StorageFile FileThumbnail = await ApplicationData.Current.TemporaryFolder.CreateFileAsync("FileThumbnail.png", CreationCollisionOption.ReplaceExisting); if (await ExecuteFile.GetThumbnailRawStreamAsync() is IRandomAccessStream ThumbnailStream) { try { BitmapDecoder Decoder = await BitmapDecoder.CreateAsync(ThumbnailStream); using (SoftwareBitmap SBitmap = await Decoder.GetSoftwareBitmapAsync(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied)) using (SoftwareBitmap ResizeBitmap = ComputerVisionProvider.ResizeToActual(SBitmap)) using (InMemoryRandomAccessStream ResizeBitmapStream = new InMemoryRandomAccessStream()) { BitmapEncoder Encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, ResizeBitmapStream); Encoder.SetSoftwareBitmap(ResizeBitmap); await Encoder.FlushAsync(); BitmapImage Image = new BitmapImage(); Icon.Source = Image; await Image.SetSourceAsync(ResizeBitmapStream); ResizeBitmapStream.Seek(0); using (Stream TransformStream = ResizeBitmapStream.AsStreamForRead()) using (Stream FileStream = await FileThumbnail.OpenStreamForWriteAsync()) { await TransformStream.CopyToAsync(FileStream); } } } finally { ThumbnailStream.Dispose(); } } else { Uri PageUri = AppThemeController.Current.Theme == ElementTheme.Dark ? new Uri("ms-appx:///Assets/Page_Solid_White.png") : new Uri("ms-appx:///Assets/Page_Solid_Black.png"); StorageFile PageFile = await StorageFile.GetFileFromApplicationUriAsync(PageUri); using (IRandomAccessStream PageStream = await PageFile.OpenAsync(FileAccessMode.Read)) { BitmapImage Image = new BitmapImage(); Icon.Source = Image; await Image.SetSourceAsync(PageStream); PageStream.Seek(0); using (Stream TransformStream = PageStream.AsStreamForRead()) using (Stream FileStream = await FileThumbnail.OpenStreamForWriteAsync()) { await TransformStream.CopyToAsync(FileStream); } } } ImageFile = FileThumbnail; } } catch (Exception ex) { LogTracer.Log(ex); FailureTips.IsOpen = true; } }
private async void GetImageAutomatic_Click(object sender, RoutedEventArgs e) { if (string.IsNullOrWhiteSpace(Protocol.Text)) { EmptyTip.Target = Protocol; EmptyTip.IsOpen = true; return; } switch (Type) { case QuickStartType.Application: { if (Uri.TryCreate(Protocol.Text, UriKind.Absolute, out Uri Result)) { if (Result.IsFile) { if (await FileSystemStorageItemBase.CheckExistAsync(Protocol.Text)) { try { StorageFile ExecuteFile = await StorageFile.GetFileFromPathAsync(Protocol.Text); IDictionary <string, object> PropertiesDictionary = await ExecuteFile.Properties.RetrievePropertiesAsync(new string[] { "System.FileDescription" }); string ExtraAppName = string.Empty; if (PropertiesDictionary.TryGetValue("System.FileDescription", out object DescriptionRaw)) { ExtraAppName = Convert.ToString(DescriptionRaw); } DisplayName.Text = string.IsNullOrEmpty(ExtraAppName) ? ExecuteFile.DisplayName : ExtraAppName; StorageFile FileThumbnail = await ApplicationData.Current.TemporaryFolder.CreateFileAsync("FileThumbnail.png", CreationCollisionOption.ReplaceExisting); if (await ExecuteFile.GetThumbnailRawStreamAsync() is IRandomAccessStream ThumbnailStream) { BitmapDecoder Decoder = await BitmapDecoder.CreateAsync(ThumbnailStream); using (SoftwareBitmap SBitmap = await Decoder.GetSoftwareBitmapAsync(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied)) using (SoftwareBitmap ResizeBitmap = ComputerVisionProvider.ResizeToActual(SBitmap)) using (InMemoryRandomAccessStream ResizeBitmapStream = new InMemoryRandomAccessStream()) { BitmapEncoder Encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, ResizeBitmapStream); Encoder.SetSoftwareBitmap(ResizeBitmap); await Encoder.FlushAsync(); BitmapImage Image = new BitmapImage(); Icon.Source = Image; await Image.SetSourceAsync(ResizeBitmapStream); ResizeBitmapStream.Seek(0); using (Stream TransformStream = ResizeBitmapStream.AsStreamForRead()) using (Stream FileStream = await FileThumbnail.OpenStreamForWriteAsync()) { await TransformStream.CopyToAsync(FileStream); } } } else { Uri PageUri = AppThemeController.Current.Theme == ElementTheme.Dark ? new Uri("ms-appx:///Assets/Page_Solid_White.png") : new Uri("ms-appx:///Assets/Page_Solid_Black.png"); StorageFile PageFile = await StorageFile.GetFileFromApplicationUriAsync(PageUri); using (IRandomAccessStream PageStream = await PageFile.OpenAsync(FileAccessMode.Read)) { BitmapImage Image = new BitmapImage(); Icon.Source = Image; await Image.SetSourceAsync(PageStream); PageStream.Seek(0); using (Stream TransformStream = PageStream.AsStreamForRead()) using (Stream FileStream = await FileThumbnail.OpenStreamForWriteAsync()) { await TransformStream.CopyToAsync(FileStream); } } } ImageFile = FileThumbnail; } catch { FailureTips.IsOpen = true; } } else { FailureTips.IsOpen = true; } } else { if ((await Launcher.FindUriSchemeHandlersAsync(Result.Scheme)).FirstOrDefault() is AppInfo App) { DisplayName.Text = App.DisplayInfo.DisplayName; StorageFile FileThumbnail = await ApplicationData.Current.TemporaryFolder.CreateFileAsync("FileThumbnail.png", CreationCollisionOption.ReplaceExisting); try { using (IRandomAccessStreamWithContentType LogoStream = await App.DisplayInfo.GetLogo(new Windows.Foundation.Size(120, 120)).OpenReadAsync()) { BitmapDecoder Decoder = await BitmapDecoder.CreateAsync(LogoStream); using (SoftwareBitmap SBitmap = await Decoder.GetSoftwareBitmapAsync(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied)) using (SoftwareBitmap ResizeBitmap = ComputerVisionProvider.ResizeToActual(SBitmap)) using (InMemoryRandomAccessStream ResizeBitmapStream = new InMemoryRandomAccessStream()) { BitmapEncoder Encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, ResizeBitmapStream); Encoder.SetSoftwareBitmap(ResizeBitmap); await Encoder.FlushAsync(); BitmapImage Source = new BitmapImage(); Icon.Source = Source; await Source.SetSourceAsync(ResizeBitmapStream); ResizeBitmapStream.Seek(0); using (Stream FileStream = await FileThumbnail.OpenStreamForWriteAsync()) { await ResizeBitmapStream.AsStreamForRead().CopyToAsync(FileStream); } } } } catch { Uri PageUri = AppThemeController.Current.Theme == ElementTheme.Dark ? new Uri("ms-appx:///Assets/Page_Solid_White.png") : new Uri("ms-appx:///Assets/Page_Solid_Black.png"); StorageFile PageFile = await StorageFile.GetFileFromApplicationUriAsync(PageUri); using (IRandomAccessStream PageStream = await PageFile.OpenAsync(FileAccessMode.Read)) { BitmapImage Image = new BitmapImage(); Icon.Source = Image; await Image.SetSourceAsync(PageStream); PageStream.Seek(0); using (Stream TransformStream = PageStream.AsStreamForRead()) using (Stream FileStream = await FileThumbnail.OpenStreamForWriteAsync()) { await TransformStream.CopyToAsync(FileStream); } } } ImageFile = FileThumbnail; } else { FormatErrorTip.IsOpen = true; } } } else { using (FullTrustProcessController.ExclusiveUsage Exclusive = await FullTrustProcessController.GetAvailableController()) { if (await Exclusive.Controller.GetInstalledApplicationAsync(Protocol.Text) is InstalledApplication Pack) { StorageFile FileThumbnail = await ApplicationData.Current.TemporaryFolder.CreateFileAsync("FileThumbnail.png", CreationCollisionOption.ReplaceExisting); if (Pack.CreateStreamFromLogoData() is Stream LogoStream) { try { BitmapDecoder Decoder = await BitmapDecoder.CreateAsync(LogoStream.AsRandomAccessStream()); using (SoftwareBitmap SBitmap = await Decoder.GetSoftwareBitmapAsync(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied)) using (SoftwareBitmap ResizeBitmap = ComputerVisionProvider.ResizeToActual(SBitmap)) using (InMemoryRandomAccessStream ResizeBitmapStream = new InMemoryRandomAccessStream()) { BitmapEncoder Encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, ResizeBitmapStream); Encoder.SetSoftwareBitmap(ResizeBitmap); await Encoder.FlushAsync(); BitmapImage Image = new BitmapImage(); Icon.Source = Image; await Image.SetSourceAsync(ResizeBitmapStream); ResizeBitmapStream.Seek(0); using (Stream FileStream = await FileThumbnail.OpenStreamForWriteAsync()) { await ResizeBitmapStream.AsStreamForRead().CopyToAsync(FileStream); } } } catch { Uri PageUri = AppThemeController.Current.Theme == ElementTheme.Dark ? new Uri("ms-appx:///Assets/Page_Solid_White.png") : new Uri("ms-appx:///Assets/Page_Solid_Black.png"); StorageFile PageFile = await StorageFile.GetFileFromApplicationUriAsync(PageUri); using (IRandomAccessStream PageStream = await PageFile.OpenAsync(FileAccessMode.Read)) { BitmapImage Image = new BitmapImage(); Icon.Source = Image; await Image.SetSourceAsync(PageStream); PageStream.Seek(0); using (Stream TransformStream = PageStream.AsStreamForRead()) using (Stream FileStream = await FileThumbnail.OpenStreamForWriteAsync()) { await TransformStream.CopyToAsync(FileStream); } } } finally { LogoStream.Dispose(); } } else { Uri PageUri = AppThemeController.Current.Theme == ElementTheme.Dark ? new Uri("ms-appx:///Assets/Page_Solid_White.png") : new Uri("ms-appx:///Assets/Page_Solid_Black.png"); StorageFile PageFile = await StorageFile.GetFileFromApplicationUriAsync(PageUri); using (IRandomAccessStream PageStream = await PageFile.OpenAsync(FileAccessMode.Read)) { BitmapImage Image = new BitmapImage(); Icon.Source = Image; await Image.SetSourceAsync(PageStream); PageStream.Seek(0); using (Stream TransformStream = PageStream.AsStreamForRead()) using (Stream FileStream = await FileThumbnail.OpenStreamForWriteAsync()) { await TransformStream.CopyToAsync(FileStream); } } } ImageFile = FileThumbnail; } else { FormatErrorTip.IsOpen = true; } } } break; } case QuickStartType.WebSite: { try { if (Uri.TryCreate(Protocol.Text, UriKind.Absolute, out Uri Result)) { Uri ImageUri = new Uri($"{Result.Scheme}://{Result.Host}/favicon.ico"); HttpWebRequest Request = WebRequest.CreateHttp(ImageUri); using (WebResponse Response = await Request.GetResponseAsync()) using (Stream WebImageStream = Response.GetResponseStream()) using (MemoryStream TemplateStream = new MemoryStream()) { await WebImageStream.CopyToAsync(TemplateStream); TemplateStream.Seek(0, SeekOrigin.Begin); if (TemplateStream.Length > 0) { BitmapImage Bitmap = new BitmapImage(); Icon.Source = Bitmap; await Bitmap.SetSourceAsync(TemplateStream.AsRandomAccessStream()); TemplateStream.Seek(0, SeekOrigin.Begin); StorageFile DownloadImage = await ApplicationData.Current.TemporaryFolder.CreateFileAsync("DownloadFile.ico", CreationCollisionOption.ReplaceExisting); using (Stream LocalFileStream = await DownloadImage.OpenStreamForWriteAsync()) { await TemplateStream.CopyToAsync(LocalFileStream); } ImageFile = DownloadImage; } else { FailureTips.IsOpen = true; } } } else { FailureTips.IsOpen = true; } } catch { try { Uri QueryUrl1 = new Uri($"http://statics.dnspod.cn/proxy_favicon/_/favicon?domain={new Uri(Protocol.Text).Host}"); Uri QueryUrl2 = new Uri($"http://www.google.com/s2/favicons?domain={new Uri(Protocol.Text).Host}"); WebResponse Response; HttpWebRequest Request; if (Globalization.CurrentLanguage == LanguageEnum.Chinese_Simplified) { Request = WebRequest.CreateHttp(QueryUrl1); Response = await Request.GetResponseAsync(); } else { try { Request = WebRequest.CreateHttp(QueryUrl2); Response = await Request.GetResponseAsync(); } catch { Request = WebRequest.CreateHttp(QueryUrl1); Response = await Request.GetResponseAsync(); } } try { using (Stream WebImageStream = Response.GetResponseStream()) using (MemoryStream TemplateStream = new MemoryStream()) { await WebImageStream.CopyToAsync(TemplateStream); TemplateStream.Seek(0, SeekOrigin.Begin); if (TemplateStream.Length > 0) { BitmapImage Bitmap = new BitmapImage(); Icon.Source = Bitmap; await Bitmap.SetSourceAsync(TemplateStream.AsRandomAccessStream()); TemplateStream.Seek(0, SeekOrigin.Begin); StorageFile DownloadImage = await ApplicationData.Current.TemporaryFolder.CreateFileAsync("DownloadFile.ico", CreationCollisionOption.ReplaceExisting); using (Stream LocalFileStream = await DownloadImage.OpenStreamForWriteAsync()) { await TemplateStream.CopyToAsync(LocalFileStream); } ImageFile = DownloadImage; } else { FailureTips.IsOpen = true; } } } finally { Response?.Dispose(); } } catch { FailureTips.IsOpen = true; } } break; } } }
private async void PropertyBase_Loading(FrameworkElement sender, object args) { Thumbnail.Source = StorageItem.Thumbnail; StorageItemName.Text = StorageItem.Name; TypeContent.Text = StorageItem.DisplayType; LocationContent.Text = StorageItem.Path; string AdminExecutablePath = await SQLite.Current.GetDefaultProgramPickerRecordAsync(StorageItem.Type).ConfigureAwait(true); if (string.IsNullOrEmpty(AdminExecutablePath)) { switch (StorageItem.Type.ToLower()) { case ".jpg": case ".png": case ".bmp": case ".mkv": case ".mp4": case ".mp3": case ".flac": case ".wma": case ".wmv": case ".m4a": case ".mov": case ".txt": case ".pdf": { OpenWithContent.Text = Package.Current.DisplayName; RandomAccessStreamReference Reference = Package.Current.GetLogoAsRandomAccessStreamReference(new Size(50, 50)); using (IRandomAccessStreamWithContentType LogoStream = await Reference.OpenReadAsync()) { BitmapDecoder Decoder = await BitmapDecoder.CreateAsync(LogoStream); using (SoftwareBitmap SBitmap = await Decoder.GetSoftwareBitmapAsync(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied)) using (SoftwareBitmap ResizeBitmap = ComputerVisionProvider.ResizeToActual(SBitmap)) using (InMemoryRandomAccessStream Stream = new InMemoryRandomAccessStream()) { BitmapEncoder Encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, Stream); Encoder.SetSoftwareBitmap(ResizeBitmap); await Encoder.FlushAsync(); BitmapImage Image = new BitmapImage(); OpenWithImage.Source = Image; await Image.SetSourceAsync(Stream); } } break; } default: { OpenWithContent.Text = "选择一个应用"; OpenWithImage.Source = new BitmapImage(new Uri(AppThemeController.Current.Theme == ElementTheme.Dark ? "ms-appx:///Assets/Page_Solid_White.png" : "ms-appx:///Assets/Page_Solid_Black.png")); break; } } } else if (Path.IsPathRooted(AdminExecutablePath)) { try { StorageFile OpenProgramFile = await StorageFile.GetFileFromPathAsync(AdminExecutablePath); OpenWithImage.Source = await OpenProgramFile.GetThumbnailBitmapAsync().ConfigureAwait(true); IDictionary <string, object> PropertiesDictionary = await OpenProgramFile.Properties.RetrievePropertiesAsync(new string[] { "System.FileDescription" }); if (PropertiesDictionary.TryGetValue("System.FileDescription", out object DescriptionRaw)) { OpenWithContent.Text = Convert.ToString(DescriptionRaw); } else { OpenWithContent.Text = OpenProgramFile.DisplayName; } } catch { OpenWithContent.Text = "选择一个应用"; OpenWithImage.Source = new BitmapImage(new Uri(AppThemeController.Current.Theme == ElementTheme.Dark ? "ms-appx:///Assets/Page_Solid_White.png" : "ms-appx:///Assets/Page_Solid_Black.png")); } } else { if (AdminExecutablePath == Package.Current.Id.FamilyName) { OpenWithContent.Text = Package.Current.DisplayName; RandomAccessStreamReference Reference = Package.Current.GetLogoAsRandomAccessStreamReference(new Size(50, 50)); using (IRandomAccessStreamWithContentType LogoStream = await Reference.OpenReadAsync()) { BitmapDecoder Decoder = await BitmapDecoder.CreateAsync(LogoStream); using (SoftwareBitmap SBitmap = await Decoder.GetSoftwareBitmapAsync(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied)) using (SoftwareBitmap ResizeBitmap = ComputerVisionProvider.ResizeToActual(SBitmap)) using (InMemoryRandomAccessStream Stream = new InMemoryRandomAccessStream()) { BitmapEncoder Encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, Stream); Encoder.SetSoftwareBitmap(ResizeBitmap); await Encoder.FlushAsync(); BitmapImage Image = new BitmapImage(); OpenWithImage.Source = Image; await Image.SetSourceAsync(Stream); } } } else { if ((await Launcher.FindFileHandlersAsync(StorageItem.Type)).FirstOrDefault((Item) => Item.PackageFamilyName == AdminExecutablePath) is AppInfo Info) { OpenWithContent.Text = Info.Package.DisplayName; RandomAccessStreamReference Reference = Info.Package.GetLogoAsRandomAccessStreamReference(new Size(50, 50)); using (IRandomAccessStreamWithContentType LogoStream = await Reference.OpenReadAsync()) { BitmapDecoder Decoder = await BitmapDecoder.CreateAsync(LogoStream); using (SoftwareBitmap SBitmap = await Decoder.GetSoftwareBitmapAsync(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied)) using (SoftwareBitmap ResizeBitmap = ComputerVisionProvider.ResizeToActual(SBitmap)) using (InMemoryRandomAccessStream Stream = new InMemoryRandomAccessStream()) { BitmapEncoder Encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, Stream); Encoder.SetSoftwareBitmap(ResizeBitmap); await Encoder.FlushAsync(); BitmapImage Image = new BitmapImage(); OpenWithImage.Source = Image; await Image.SetSourceAsync(Stream); } } } else { OpenWithContent.Text = "选择一个应用"; OpenWithImage.Source = new BitmapImage(new Uri(AppThemeController.Current.Theme == ElementTheme.Dark ? "ms-appx:///Assets/Page_Solid_White.png" : "ms-appx:///Assets/Page_Solid_Black.png")); } } } }
private async void GetImageAutomatic_Click(object sender, RoutedEventArgs e) { if (string.IsNullOrWhiteSpace(Protocol.Text)) { EmptyTip.Target = Protocol; EmptyTip.IsOpen = true; return; } switch (Type) { case QuickStartType.Application: case QuickStartType.UpdateApp: { if (Uri.TryCreate(Protocol.Text, UriKind.Absolute, out Uri Result)) { if (Result.IsFile) { if (WIN_Native_API.CheckExist(Protocol.Text)) { try { StorageFile ExcuteFile = await StorageFile.GetFileFromPathAsync(Protocol.Text); DisplayName.Text = Convert.ToString((await ExcuteFile.Properties.RetrievePropertiesAsync(new string[] { "System.FileDescription" }))["System.FileDescription"]); if (await ExcuteFile.GetThumbnailBitmapAsync().ConfigureAwait(true) is BitmapImage Image) { Icon.Source = Image; } else { Icon.Source = new BitmapImage(new Uri("ms-appx:///Assets/Page_Solid_White.png")); } RenderTargetBitmap RTB = new RenderTargetBitmap(); await RTB.RenderAsync(Icon); StorageFile FileThumbnail = await ApplicationData.Current.TemporaryFolder.CreateFileAsync("FileThumbnail.png", CreationCollisionOption.ReplaceExisting); using (IRandomAccessStream Stream = await FileThumbnail.OpenAsync(FileAccessMode.ReadWrite)) { BitmapEncoder Encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, Stream); byte[] PixelData = (await RTB.GetPixelsAsync()).ToArray(); Encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied, (uint)RTB.PixelWidth, (uint)RTB.PixelHeight, DisplayInformation.GetForCurrentView().LogicalDpi, DisplayInformation.GetForCurrentView().LogicalDpi, PixelData); await Encoder.FlushAsync(); } ImageFile = FileThumbnail; } catch { FailureTips.IsOpen = true; } } else { FailureTips.IsOpen = true; } } else { if ((await Launcher.FindUriSchemeHandlersAsync(Result.Scheme)).ToList().FirstOrDefault() is AppInfo App) { DisplayName.Text = App.DisplayInfo.DisplayName; using (IRandomAccessStreamWithContentType LogoStream = await App.DisplayInfo.GetLogo(new Windows.Foundation.Size(120, 120)).OpenReadAsync()) { BitmapDecoder Decoder = await BitmapDecoder.CreateAsync(LogoStream); using (SoftwareBitmap SBitmap = await Decoder.GetSoftwareBitmapAsync(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied)) using (SoftwareBitmap ResizeBitmap = ComputerVisionProvider.ResizeToActual(SBitmap)) { StorageFile FileThumbnail = await ApplicationData.Current.TemporaryFolder.CreateFileAsync("FileThumbnail.png", CreationCollisionOption.ReplaceExisting); using (IRandomAccessStream Stream = await FileThumbnail.OpenAsync(FileAccessMode.ReadWrite)) { BitmapEncoder Encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, Stream); Encoder.SetSoftwareBitmap(ResizeBitmap); await Encoder.FlushAsync(); } ImageFile = FileThumbnail; using (IRandomAccessStream Stream = await FileThumbnail.OpenAsync(FileAccessMode.Read)) { BitmapImage Source = new BitmapImage(); await Source.SetSourceAsync(Stream); Icon.Source = Source; } } } } else { FormatErrorTip.IsOpen = true; } } } else { FormatErrorTip.IsOpen = true; } break; } case QuickStartType.WebSite: case QuickStartType.UpdateWeb: { try { if (Uri.TryCreate(Protocol.Text, UriKind.Absolute, out Uri Result)) { Uri ImageUri = new Uri(Result, "favicon.ico"); HttpWebRequest Request = WebRequest.CreateHttp(ImageUri); using (WebResponse Response = await Request.GetResponseAsync().ConfigureAwait(true)) using (Stream ImageStream = Response.GetResponseStream()) { StorageFile DownloadImage = await ApplicationData.Current.TemporaryFolder.CreateFileAsync("DownloadFile.ico", CreationCollisionOption.ReplaceExisting); using (Stream FileStream = await DownloadImage.OpenStreamForWriteAsync().ConfigureAwait(true)) { await ImageStream.CopyToAsync(FileStream).ConfigureAwait(true); } ImageFile = DownloadImage; } Icon.Source = new BitmapImage(ImageUri); } else { FailureTips.IsOpen = true; } } catch { try { Uri QueryUrl = Globalization.CurrentLanguage == LanguageEnum.Chinese_Simplified ? new Uri($"http://statics.dnspod.cn/proxy_favicon/_/favicon?domain={new Uri(Protocol.Text).Host}") : new Uri($"http://www.google.com/s2/favicons?domain={new Uri(Protocol.Text).Host}"); HttpWebRequest Request = WebRequest.CreateHttp(QueryUrl); using (WebResponse Response = await Request.GetResponseAsync().ConfigureAwait(true)) using (Stream ImageStream = Response.GetResponseStream()) { StorageFile DownloadImage = await ApplicationData.Current.TemporaryFolder.CreateFileAsync("DownloadFile.ico", CreationCollisionOption.ReplaceExisting); using (Stream FileStream = await DownloadImage.OpenStreamForWriteAsync().ConfigureAwait(true)) { await ImageStream.CopyToAsync(FileStream).ConfigureAwait(true); } ImageFile = DownloadImage; } Icon.Source = new BitmapImage(QueryUrl); } catch { FailureTips.IsOpen = true; } } break; } } }
private async void ProgramPickerDialog_Loading(FrameworkElement sender, object args) { LoadingText.Text = Globalization.GetString("Progress_Tip_Loading"); LoadingText.Visibility = Visibility.Visible; WholeArea.Visibility = Visibility.Collapsed; List <ProgramPickerItem> RecommandList = new List <ProgramPickerItem>(); try { using (FullTrustProcessController.ExclusiveUsage Exclusive = await FullTrustProcessController.GetAvailableController()) { List <AssociationPackage> AssocList = await Exclusive.Controller.GetAssociateFromPathAsync(OpenFile.Path).ConfigureAwait(true); List <AppInfo> AppInfoList = (await Launcher.FindFileHandlersAsync(OpenFile.Type)).ToList(); await SQLite.Current.UpdateProgramPickerRecordAsync(OpenFile.Type, AssocList.Concat(AppInfoList.Select((Info) => new AssociationPackage(OpenFile.Type, Info.PackageFamilyName, true)))).ConfigureAwait(true); foreach (AppInfo Info in AppInfoList) { try { using (IRandomAccessStreamWithContentType LogoStream = await Info.DisplayInfo.GetLogo(new Windows.Foundation.Size(128, 128)).OpenReadAsync()) { BitmapDecoder Decoder = await BitmapDecoder.CreateAsync(LogoStream); using (SoftwareBitmap SBitmap = await Decoder.GetSoftwareBitmapAsync(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied)) using (SoftwareBitmap ResizeBitmap = ComputerVisionProvider.ResizeToActual(SBitmap)) using (InMemoryRandomAccessStream Stream = new InMemoryRandomAccessStream()) { BitmapEncoder Encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, Stream); Encoder.SetSoftwareBitmap(ResizeBitmap); await Encoder.FlushAsync(); BitmapImage Image = new BitmapImage(); await Image.SetSourceAsync(Stream); RecommandList.Add(new ProgramPickerItem(Image, Info.DisplayInfo.DisplayName, Info.DisplayInfo.Description, Info.PackageFamilyName)); } } } catch (Exception ex) { LogTracer.Log(ex, "An exception was threw when getting or processing App Logo"); } } } } catch (Exception ex) { LogTracer.Log(ex, "An exception was threw when fetching association data"); } foreach (AssociationPackage Package in await SQLite.Current.GetProgramPickerRecordAsync(OpenFile.Type, false).ConfigureAwait(true)) { try { if (WIN_Native_API.CheckExist(Package.ExecutablePath)) { StorageFile ExecuteFile = await StorageFile.GetFileFromPathAsync(Package.ExecutablePath); IDictionary <string, object> PropertiesDictionary = await ExecuteFile.Properties.RetrievePropertiesAsync(new string[] { "System.FileDescription" }); string ExtraAppName = string.Empty; if (PropertiesDictionary.TryGetValue("System.FileDescription", out object DescriptionRaw)) { ExtraAppName = Convert.ToString(DescriptionRaw); } if (await ExecuteFile.GetThumbnailRawStreamAsync().ConfigureAwait(true) is IRandomAccessStream ThumbnailStream) { using (ThumbnailStream) { BitmapDecoder Decoder = await BitmapDecoder.CreateAsync(ThumbnailStream); using (SoftwareBitmap SBitmap = await Decoder.GetSoftwareBitmapAsync(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied)) using (SoftwareBitmap ResizeBitmap = ComputerVisionProvider.ResizeToActual(SBitmap)) using (InMemoryRandomAccessStream ResizeBitmapStream = new InMemoryRandomAccessStream()) { BitmapEncoder Encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, ResizeBitmapStream); Encoder.SetSoftwareBitmap(ResizeBitmap); await Encoder.FlushAsync(); BitmapImage ThumbnailBitmap = new BitmapImage(); await ThumbnailBitmap.SetSourceAsync(ResizeBitmapStream); if (Package.IsRecommanded) { RecommandList.Add(new ProgramPickerItem(ThumbnailBitmap, string.IsNullOrEmpty(ExtraAppName) ? ExecuteFile.DisplayName : ExtraAppName, Globalization.GetString("Application_Admin_Name"), ExecuteFile.Path)); } else { NotRecommandList.Add(new ProgramPickerItem(ThumbnailBitmap, string.IsNullOrEmpty(ExtraAppName) ? ExecuteFile.DisplayName : ExtraAppName, Globalization.GetString("Application_Admin_Name"), ExecuteFile.Path)); } } } } else { if (Package.IsRecommanded) { RecommandList.Add(new ProgramPickerItem(new BitmapImage(AppThemeController.Current.Theme == ElementTheme.Dark ? new Uri("ms-appx:///Assets/Page_Solid_White.png") : new Uri("ms-appx:///Assets/Page_Solid_Black.png")), string.IsNullOrEmpty(ExtraAppName) ? ExecuteFile.DisplayName : ExtraAppName, Globalization.GetString("Application_Admin_Name"), ExecuteFile.Path)); } else { NotRecommandList.Add(new ProgramPickerItem(new BitmapImage(AppThemeController.Current.Theme == ElementTheme.Dark ? new Uri("ms-appx:///Assets/Page_Solid_White.png") : new Uri("ms-appx:///Assets/Page_Solid_Black.png")), string.IsNullOrEmpty(ExtraAppName) ? ExecuteFile.DisplayName : ExtraAppName, Globalization.GetString("Application_Admin_Name"), ExecuteFile.Path)); } } } else { await SQLite.Current.DeleteProgramPickerRecordAsync(Package).ConfigureAwait(true); } } catch (Exception ex) { LogTracer.Log(ex, "An exception was threw trying add to ApplicationList"); } } string AdminExecutablePath = await SQLite.Current.GetDefaultProgramPickerRecordAsync(OpenFile.Type).ConfigureAwait(true); if (!string.IsNullOrEmpty(AdminExecutablePath)) { if (RecommandList.FirstOrDefault((Item) => Item.Path.Equals(AdminExecutablePath, StringComparison.OrdinalIgnoreCase)) is ProgramPickerItem RecommandItem) { CurrentUseProgramList.Items.Add(RecommandItem); CurrentUseProgramList.SelectedIndex = 0; RecommandList.Remove(RecommandItem); } else if (NotRecommandList.FirstOrDefault((Item) => Item.Path.Equals(AdminExecutablePath, StringComparison.OrdinalIgnoreCase)) is ProgramPickerItem NotRecommandItem) { CurrentUseProgramList.Items.Add(NotRecommandItem); CurrentUseProgramList.SelectedIndex = 0; NotRecommandList.Remove(NotRecommandItem); } } if (CurrentUseProgramList.Items.Count == 0) { switch (OpenFile.Type.ToLower()) { case ".jpg": case ".png": case ".bmp": case ".heic": case ".gif": case ".tiff": case ".mkv": case ".mp4": case ".mp3": case ".flac": case ".wma": case ".wmv": case ".m4a": case ".mov": case ".alac": case ".txt": case ".pdf": case ".exe": { Area1.Visibility = Visibility.Visible; CurrentUseProgramList.Visibility = Visibility.Visible; Title1.Text = Globalization.GetString("ProgramPicker_Dialog_Title_1"); Title2.Text = Globalization.GetString("ProgramPicker_Dialog_Title_2"); CurrentUseProgramList.Items.Add(new ProgramPickerItem(new BitmapImage(new Uri("ms-appx:///Assets/RX-icon.png")), Globalization.GetString("ProgramPicker_Dialog_BuiltInViewer"), Globalization.GetString("ProgramPicker_Dialog_BuiltInViewer_Description"), Package.Current.Id.FamilyName)); CurrentUseProgramList.SelectedIndex = 0; break; } default: { Area1.Visibility = Visibility.Collapsed; CurrentUseProgramList.Visibility = Visibility.Collapsed; Title2.Text = Globalization.GetString("ProgramPicker_Dialog_Title_2"); break; } } } else { Area1.Visibility = Visibility.Visible; CurrentUseProgramList.Visibility = Visibility.Visible; Title1.Text = Globalization.GetString("ProgramPicker_Dialog_Title_1"); Title2.Text = Globalization.GetString("ProgramPicker_Dialog_Title_2"); switch (OpenFile.Type.ToLower()) { case ".jpg": case ".png": case ".bmp": case ".heic": case ".gif": case ".tiff": case ".mkv": case ".mp4": case ".mp3": case ".flac": case ".wma": case ".wmv": case ".m4a": case ".mov": case ".alac": case ".txt": case ".pdf": case ".exe": { ProgramCollection.Add(new ProgramPickerItem(new BitmapImage(new Uri("ms-appx:///Assets/RX-icon.png")), Globalization.GetString("ProgramPicker_Dialog_BuiltInViewer"), Globalization.GetString("ProgramPicker_Dialog_BuiltInViewer_Description"), Package.Current.Id.FamilyName)); break; } } } if (RecommandList.Count == 0) { ShowMore.Visibility = Visibility.Collapsed; foreach (ProgramPickerItem Item in NotRecommandList) { ProgramCollection.Add(Item); } OtherProgramList.MaxHeight = 300; } else { foreach (ProgramPickerItem Item in RecommandList) { ProgramCollection.Add(Item); } } if (CurrentUseProgramList.SelectedIndex == -1) { OtherProgramList.SelectedIndex = 0; } LoadingText.Visibility = Visibility.Collapsed; WholeArea.Visibility = Visibility.Visible; }