// 外部プログラムで画像を開く private void Toolbar_OpenByExternalApp_Click(object sender, RoutedEventArgs e) { if (MainWindow.Setting.ExternalAppInfoList.Count > 0) { TargetImgFileContext.OpenByExternalApp(MainWindow.Setting.ExternalAppInfoList[0]); } else { TargetImgFileContext.OpenByExternalApp(new ExternalAppInfo()); } }
// クリップボードへコピー private void MenuItem_Copy_SubmenuOpened(object sender, RoutedEventArgs e) { MenuItem_Copy.Items.Clear(); // ファイル MenuItem mi_file = new MenuItem(); mi_file.Header = "ファイル"; mi_file.ToolTip = "コピー後、エクスプローラーで貼り付けが出来ます"; mi_file.Click += (s, ev) => { TargetImgFileContext.CopyFile(); }; MenuItem_Copy.Items.Add(mi_file); // 画像データ MenuItem mi_image = new MenuItem(); mi_image.Header = "画像データ"; mi_image.ToolTip = "コピー後、ペイント等の画像編集ソフトへ貼り付けが出来ます"; mi_image.Click += (s, ev) => { var t = TargetImgFileContext.CopyImageData(); }; MenuItem_Copy.Items.Add(mi_image); // ファイルパス string filePath; if (TargetImgFileContext.Archiver.CanReadFile) { filePath = TargetImgFileContext.FilePath; } else { filePath = TargetImgFileContext.Archiver.ArchiverPath; } MenuItem mi_filePath = new MenuItem(); mi_filePath.Header = "ファイルパス"; mi_filePath.ToolTip = filePath; mi_filePath.Click += (s, ev) => { TargetImgFileContext.CopyFilePath(); }; MenuItem_Copy.Items.Add(mi_filePath); // ファイル名 MenuItem mi_fileName = new MenuItem(); mi_fileName.Header = "ファイル名"; mi_fileName.ToolTip = Path.GetFileName(TargetImgFileContext.FilePath); mi_fileName.Click += (s, ev) => { TargetImgFileContext.CopyFileName(); }; MenuItem_Copy.Items.Add(mi_fileName); }
// エクスプローラーで開く private void Toolbar_OpenExplorer_Click(object sender, RoutedEventArgs e) { TargetImgFileContext.OpenByExplorer(); }
private void UpdateFileInfoText() { // 初期化 FileInfoGrid.Width = double.NaN; FileInfoGrid.Height = double.NaN; string newText = ""; try { ImageFileInfo ifi = TargetImgFileContext.Info; // ファイルサイズ取得 long length = 0; if (ifi.Length != 0) { length = ifi.Length; } else if (TargetImgFileContext.Archiver.CanReadFile) { FileInfo fi = new FileInfo(TargetImgFileContext.FilePath); length = fi.Length; } // 更新日時取得 if (ifi.LastWriteTime == null) { TargetImgFileContext.ReadLastWriteTime(); } // ファイル名(ページ番号) if (TargetImgFileContext.Archiver is PdfArchiver) { newText += "ページ番号: " + TargetImgFileContext.FilePath + "\n"; } else { newText += "ファイル名: " + Path.GetFileName(TargetImgFileContext.FilePath) + "\n"; } // 画像サイズ if (length != 0) { newText += "画像サイズ: " + length / 1024 + "KB\n"; } // 更新日時 if (ifi.LastWriteTime != null) { newText += "更新日時: " + ifi.LastWriteTime.Value.DateTime + "\n"; } // 撮影日時 if (ifi.ExifInfo != null && ifi.ExifInfo.DateTaken != null) { newText += "撮影日時: " + ifi.ExifInfo.DateTaken.Value.DateTime + "\n"; } // ピクセル数 Size pixelSize = ifi.PixelSize.Round(); newText += "ピクセル数: " + pixelSize.Width + "x" + pixelSize.Height; // ツールチップでファイルパス表示 if (TargetImgFileContext.Archiver.CanReadFile) { FileInfoGrid.ToolTip = TargetImgFileContext.FilePath; } else { FileInfoGrid.ToolTip = TargetImgFileContext.Archiver.ArchiverPath + "/" + TargetImgFileContext.FilePath; } ToolTipService.SetShowDuration(FileInfoGrid, 1000000); } catch { newText = "ファイル情報の取得失敗"; } finally { FileInfoTextBlock.Text = newText; // FileInfoGridのサイズをFileInfoTextBlockに合わせる FileInfoTextBlock.Dispatcher.BeginInvoke( new Action(() => { FileInfoGrid.Width = FileInfoTextBlock.RenderSize.Width; FileInfoGrid.Height = FileInfoTextBlock.RenderSize.Height; }), System.Windows.Threading.DispatcherPriority.Loaded ); } }
private async Task LoadImage() { // すでに実行中ならキャンセル cts_ForLoadImage?.Cancel(); // キャンセルトークン作成 var cts = new CancellationTokenSource(); cts_ForLoadImage = cts; await semaphoreSlim_ForLoadImage.WaitAsync(); try { // キャンセルされた if (cts.Token.IsCancellationRequested) { return; } ImageFileInfo fi = TargetImgFileContext.Info; // gif拡大時 if (TargetImgFileContext.Archiver.CanReadFile && Path.GetExtension(TargetImgFileContext.FilePath).ToLower() == ".gif") { var source = new BitmapImage(); source.BeginInit(); source.CacheOption = BitmapCacheOption.OnLoad; source.CreateOptions = BitmapCreateOptions.None; source.UriSource = new Uri(TargetImgFileContext.FilePath); ImageBehavior.SetAnimatedSource(ExpandedImage, source); if (cts.Token.IsCancellationRequested) { return; } ExpandedImage.Source = source; source.EndInit(); source.Freeze(); } else { ImageBehavior.SetAnimatedSource(ExpandedImage, null); int pixel = MainWindow.Setting.TempProfile.BitmapDecodeTotalPixel.Value; // ウインドウサイズに合わせたBitmapをロード //double p = MainWindow.MainContent.LayoutTransform.Value.M11; //Size winSize = new Size(MainWindow.ImgContainerManager.ContainerWidth * p, MainWindow.ImgContainerManager.ContainerHeight * p); //if(winSize.Width < fi.PixelSize.Width && winSize.Height < fi.PixelSize.Height ) // 本来の画像サイズがウインドウサイズより大きい時のみロード //{ // var bitmap = await TargetImgFileContext.LoadBitmap(winSize); // if( cts.Token.IsCancellationRequested ) return; // this.ExpandedImage.Source = bitmap; //} // 本来のサイズでBitmapをロード var trueBitmap = await TargetImgFileContext.LoadBitmap(Size.Empty); if (cts.Token.IsCancellationRequested) { return; } this.ExpandedImage.Source = trueBitmap; } } finally { semaphoreSlim_ForLoadImage.Release(); } }