Esempio n. 1
0
        void PrepereRobot()
        {
            Robots = new ImgContainer(RobotBox.Image, 270);

            RobotBox.Image.Dispose();

            RobotBox.Image = Robots.GetImageByAngle(90);
        }
Esempio n. 2
0
        void PrepereArrows()
        {
            Arrows = new ImgContainer(DirectionArrow.Image, 90);

            DirectionArrow.Image.Dispose();
            StepsDirectionArrow.Image.Dispose();

            DirectionArrow.Image      = null;
            StepsDirectionArrow.Image = null;
        }
Esempio n. 3
0
        // Наложение вотермарки на полученную картинку и сохранение ее
        private void HandleImage(ImgContainer imgContainer)
        {
            Console.WriteLine($"получено изображение {imgContainer.Name}");

            using (var watermark = new Bitmap(@"C:\Users\Winnie\source\repos\ConverterApp\logo.png")) // берем вотермарку
                using (var graph = Graphics.FromImage(imgContainer.Img))
                {
                    // накладываем вотермарку на полученное изображение
                    graph.DrawImage(watermark, new Rectangle(0, 0, watermark.Width, watermark.Height));

                    // сохранение получившегося изображения
                    imgContainer.Img.Save(@"C:\Users\Winnie\source\repos\ConverterApp\outcoming\" + imgContainer.Name);
                }
        }
Esempio n. 4
0
        public ImageFileContext GetImageFileContextUnderCursor()
        {
            Border border = GetBorderUnderCursor();

            if (border == null)
            {
                return(null);
            }

            ImgContainer parentContainer = WpfTreeUtil.FindAncestor <ImgContainer>(border);

            if (parentContainer == null)
            {
                return(null);
            }
            int idx = parentContainer.MainGrid.Children.IndexOf(border);
            ImageFileContext targetImgFileContext = parentContainer.ImageFileContextMapList[idx];

            return(targetImgFileContext);
        }
Esempio n. 5
0
        // Отправляет картинки по шине, после чего удаляет.
        private void OnCreated(object source, FileSystemEventArgs e)
        {
            Console.WriteLine($"Новый файл: {e.FullPath} {e.ChangeType}");

            // брем вновь появившуюся картинку
            var img = (Bitmap)Image.FromFile(@e.FullPath);

            // картинку и ее имя отправляем вместе, поэтому используем класс (easyNetq требует ссылочный тип для отправки)
            ImgContainer imgContainer = new ImgContainer(img, GetExtensionFromPath(@e.FullPath));

            // отправляем картинку
            var producer = new Producer();

            producer.Send <ImgContainer>(imgContainer);

            // чтобы удалить отправленную картинку, очищаем от ней переменную
            img.Dispose();

            // удаляем отправленную картинку
            System.IO.File.Delete(@e.FullPath);
        }
Esempio n. 6
0
        public async Task Show(Border border)
        {
            // まだ拡大パネルを閉じるアニメーション中
            if (!IsAnimationCompleted)
            {
                return;
            }

            // ターゲット
            this.TargetBorder    = border;
            this.ParentContainer = WpfTreeUtil.FindAncestor <ImgContainer>(border);
            if (ParentContainer == null)
            {
                return;
            }
            int idx = ParentContainer.MainGrid.Children.IndexOf(border);

            this.TargetImgFileContext = ParentContainer.ImageFileContextMapList[idx];

            // 画像変更フラグ初期化
            this.isImageFileChanged = false;

            // 設定プロファイル
            Profile pf = MainWindow.Setting.TempProfile;

            // ダミーをクリックした時
            if (TargetImgFileContext.IsDummy)
            {
                return;
            }

            // 再生中だったら、レジュームの準備
            if (MainWindow.IsPlaying)
            {
                MainWindow.ImgContainerManager.StopSlideShow(false);
                ExpandedDuringPlay = true;
            }
            else
            {
                ExpandedDuringPlay = false;
            }

            // タイル画像をコピー
            ExpandedImage.Source = TargetImgFileContext.BitmapImage;
            if (ExpandedImage.Source == null)
            {
                return;
            }

            // ボーダー色、背景色
            ExpandedBorder.BorderBrush = new SolidColorBrush(pf.GridLineColor.Value);
            if (pf.UsePlaidBackground.Value)
            {
                ExpandedBorder.Background = Util.CreatePlaidBrush(
                    pf.BaseGridBackgroundColor.Value, pf.PairColorOfPlaidBackground.Value);
            }
            else
            {
                ExpandedBorder.Background = new SolidColorBrush(pf.BaseGridBackgroundColor.Value);
            }

            // 表示
            this.Visibility = Visibility.Visible;

            // 表示済みフラグ
            IsShowing = true;

            // ファイル情報のテキストを更新
            UpdateFileInfoText();

            // ファイルパスのテキストを更新
            //UpdateFilePathText();

            // 外部プログラムで開くボタンのツールチップ
            Toolbar_OpenByExternalApp.ToolTip = "規定のプログラムで画像を開く";
            if (MainWindow.Setting.ExternalAppInfoList.Count > 0)
            {
                string appName = MainWindow.Setting.ExternalAppInfoList[0].GetAppName();
                if (appName != null)
                {
                    Toolbar_OpenByExternalApp.ToolTip = appName + "で画像を開く";
                }
            }

            // 現在のTileContainerの拡大率
            double containerScale = MainWindow.MainContent.LayoutTransform.Value.M11;

            // タイルの矩形を取得し位置を合わせる
            Rect rc = GetTileRect();

            this.Width  = rc.Width;
            this.Height = rc.Height;
            this.Margin = new Thickness(rc.Left, rc.Top, 0, 0);

            // 列数・行数が1のときは、視覚効果を出すために初期値調整
            if (ParentContainer.NumofGrid == 1)
            {
                this.Width  = rc.Width - 20;
                this.Height = rc.Height - 20;
                this.Margin = new Thickness(rc.Left + 10, rc.Top + 10, 0, 0);
            }

            // タイル拡大パネルの枠の太さ(拡大前)
            ExpandedBorder.BorderThickness =
                new Thickness(pf.TilePadding.Value * containerScale);

            #region アニメーション準備
            // 拡大アニメーション(パネル自体)
            // --------------------------------------------------------
            storyboard = new Storyboard();
            double duration = 0.2;

            var a1 = new ThicknessAnimation(); // Margin
            Storyboard.SetTarget(a1, this);
            Storyboard.SetTargetProperty(a1, new PropertyPath(TileExpantionPanel.MarginProperty));
            Point mcMargin = new Point( // メインコンテンツのマージン
                MainWindow.MainContent.Margin.Left, MainWindow.MainContent.Margin.Top);
            a1.From     = this.Margin;
            a1.To       = new Thickness(0 + mcMargin.X, 0 + mcMargin.Y, 0, 0);
            a1.Duration = TimeSpan.FromSeconds(duration);
            storyboard.Children.Add(a1);

            var a2 = new DoubleAnimation(); // Width
            Storyboard.SetTarget(a2, this);
            Storyboard.SetTargetProperty(a2, new PropertyPath(TileExpantionPanel.WidthProperty));
            a2.From     = this.Width;
            a2.To       = MainWindow.Width - mcMargin.X * 2;
            a2.Duration = TimeSpan.FromSeconds(duration);
            storyboard.Children.Add(a2);

            var a3 = new DoubleAnimation(); // Height
            Storyboard.SetTarget(a3, this);
            Storyboard.SetTargetProperty(a3, new PropertyPath(TileExpantionPanel.HeightProperty));
            a3.From     = this.Height;
            a3.To       = MainWindow.Height - mcMargin.Y * 2;
            a3.Duration = TimeSpan.FromSeconds(duration);
            storyboard.Children.Add(a3);


            // 拡大アニメーション(枠の太さ)
            // --------------------------------------------------------

            // タイル拡大パネルの拡大率
            double panelScale = pf.NumofMatrix.Col;
            if (pf.NumofMatrix.Col > pf.NumofMatrix.Row)
            {
                panelScale = pf.NumofMatrix.Row;
            }

            var a4 = new ThicknessAnimation(); // BorderThickness
            Storyboard.SetTarget(a4, this.ExpandedBorder);
            Storyboard.SetTargetProperty(a4, new PropertyPath(Border.BorderThicknessProperty));
            a4.From     = ExpandedBorder.BorderThickness;
            a4.To       = new Thickness(ExpandedBorder.BorderThickness.Left * panelScale);
            a4.Duration = TimeSpan.FromSeconds(duration);
            storyboard.Children.Add(a4);

            storyboard.Completed += (s, e) =>
            {
                MainWindow.ImgContainerManager.Hide();
                UpdateFileInfoAreaVisiblity();
                MainWindow.UpdatePageInfo();
                IsAnimationCompleted = true;
            };
            #endregion

            // アニメーションを開始
            IsAnimationCompleted = false;
            storyboard.Begin();

            // アニメーションしながら、大きいサイズの画像をロード
            await LoadImage();
        }
Esempio n. 7
0
        public void Hide()
        {
            // まだ表示されていない
            if (!IsShowing || !IsAnimationCompleted)
            {
                return;
            }

            // まだ読み込み中のTaskがあるならキャンセル
            cts_ForLoadImage?.Cancel();

            // ファイル情報を隠す
            this.FileInfoGrid.Visibility = Visibility.Hidden;
            IsShowing = false;

            // ズーム解除
            ResetZoomAndMove();

            // もし一度でもファイルの移動があったら、ParentContainerとTargetBorderは再取得
            if (isImageFileChanged)
            {
                this.ParentContainer = MainWindow.ImgContainerManager.CurrentContainer;
                var borderIndex = ParentContainer.ImageFileContextMapList.IndexOf(TargetImgFileContext);
                if (borderIndex < 0)
                {
                    this.ParentContainer = MainWindow.ImgContainerManager.Containers.FirstOrDefault(c => c.CurrentIndex == 1);
                    borderIndex          = ParentContainer.ImageFileContextMapList.IndexOf(TargetImgFileContext);
                }
                if (borderIndex < 0)
                {
                    this.ParentContainer = MainWindow.ImgContainerManager.Containers.First(c => c.ImageFileContextMapList.Any(m => m == this.TargetImgFileContext));
                    borderIndex          = ParentContainer.ImageFileContextMapList.IndexOf(TargetImgFileContext);
                }

                if (borderIndex >= 0)
                {
                    this.TargetBorder = ParentContainer.MainGrid.Children[borderIndex] as Border;
                }
            }

            // タイルの矩形を取得
            Rect rc = GetTileRect();


            // アニメーション先の矩形
            Rect rcDest;

            // 列数・行数が1のときは、視覚効果を出すためにアニメーション先の矩形を調整
            if (ParentContainer.NumofGrid == 1)
            {
                rcDest = new Rect(rc.Left + 10, rc.Top + 10, rc.Width - 20, rc.Height - 20);
            }
            else
            {
                rcDest = new Rect(rc.Left, rc.Top, rc.Width, rc.Height);
            }


            // 現在のTileContainerの拡大率
            double zoomFactor = MainWindow.MainContent.LayoutTransform.Value.M11;

            // 縮小アニメーション(パネル自体)
            // --------------------------------------------------------
            storyboard = new Storyboard();
            double duration = 0.2;

            var a1 = new ThicknessAnimation(); // Margin

            Storyboard.SetTarget(a1, this);
            Storyboard.SetTargetProperty(a1, new PropertyPath(TileExpantionPanel.MarginProperty));
            double frameThickness = MainWindow.MainContent.Margin.Left; // メインウインドウ枠

            a1.From     = this.Margin;
            a1.To       = new Thickness(rcDest.Left, rcDest.Top, 0, 0);
            a1.Duration = TimeSpan.FromSeconds(duration);
            storyboard.Children.Add(a1);

            var a2 = new DoubleAnimation(); // Width

            Storyboard.SetTarget(a2, this);
            Storyboard.SetTargetProperty(a2, new PropertyPath(TileExpantionPanel.WidthProperty));
            a2.From     = this.Width;
            a2.To       = rcDest.Width;
            a2.Duration = TimeSpan.FromSeconds(duration);
            storyboard.Children.Add(a2);

            var a3 = new DoubleAnimation(); // Height

            Storyboard.SetTarget(a3, this);
            Storyboard.SetTargetProperty(a3, new PropertyPath(TileExpantionPanel.HeightProperty));
            a3.From     = this.Height;
            a3.To       = rcDest.Height;
            a3.Duration = TimeSpan.FromSeconds(duration);
            storyboard.Children.Add(a3);


            // 縮小アニメーション(枠の太さ)
            // --------------------------------------------------------

            // 現在のTileContainerの拡大率
            double containerScale = MainWindow.MainContent.LayoutTransform.Value.M11;

            // タイル拡大パネルの枠の太さ(縮小後)
            Thickness destThickness =
                new Thickness(MainWindow.Setting.TempProfile.TilePadding.Value * containerScale);

            var a4 = new ThicknessAnimation(); // BorderThickness

            Storyboard.SetTarget(a4, this.ExpandedBorder);
            Storyboard.SetTargetProperty(a4, new PropertyPath(Border.BorderThicknessProperty));
            a4.From     = new Thickness(ExpandedBorder.BorderThickness.Left);
            a4.To       = destThickness;
            a4.Duration = TimeSpan.FromSeconds(duration);
            storyboard.Children.Add(a4);


            storyboard.Completed += (s, e) =>
            {
                storyboard.Remove();
                //Margin = new Thickness(Margin.Left, Margin.Top, 0, 0);
                this.Visibility = Visibility.Hidden;
                if (ExpandedDuringPlay)
                {
                    MainWindow.ImgContainerManager.StartSlideShow(false);
                }
                IsAnimationCompleted = true;
                MainWindow.UpdatePageInfo();
            };

            // コンテナを表示
            MainWindow.ImgContainerManager.Show();

            // アニメーションを開始
            storyboard.Begin();
            IsAnimationCompleted = false;
        }