Предварительный просмотр снимка экрана в winform

Я в процессе создания ножницы. У меня есть так, что мою программу можно использовать для рисования прямоугольника с помощью мыши и сохранения этого изображения. Теперь то, что я пытаюсь сделать, это передать сгенерированное изображение в окно изображения, которое показывает пользователю то, что он только что захватил, прежде чем он решит сохранить его или что-то еще.

Есть ли способ, которым я могу это сделать?

Пока мой код захвата экрана сохраняет захваченное изображение в буфер обмена со следующим кодом, найденным в моем классе ScreenCapture:

 public static bool saveToClipboard = true;

     public static void CaptureImage(bool showCursor, Size curSize, Point curPos, Point SourcePoint, Point DestinationPoint, Rectangle SelectionRectangle, string FilePath, string extension)
     {
         using (Bitmap bitmap = new Bitmap(SelectionRectangle.Width, SelectionRectangle.Height))
         {
             using (Graphics g = Graphics.FromImage(bitmap))
             {
                 g.CopyFromScreen(SourcePoint, DestinationPoint, SelectionRectangle.Size);

                 if (showCursor)
                 {
                     Rectangle cursorBounds = new Rectangle(curPos, curSize);
                     Cursors.Default.Draw(g, cursorBounds);
                 }
             }

             if (saveToClipboard)
             {
                 Image img = (Image)bitmap;
                 Clipboard.SetImage(img);
             }



         }
     }

Кто-нибудь когда-нибудь делал что-то подобное раньше? Кроме того, возможно ли автоматическое изменение размера окна изображения, чтобы использовался размер экрана, а не поля изображения?

обновить

В дополнение к некоторым комментариям ниже я пытался сохранить изображение, которое я храню в своем классе выше, и передать его в окно изображения. Но ничего не отображается, когда я это делаю. Код, который я использовал, выглядит следующим образом:

Проводится на форме1.cs:

   public void SetImage(Image img)
    {
        imagePreview.Image = img;
    }

И в классе захвата экрана:

       if (saveToClipboard)
        {
          Image img = (Image)bitmap;
          ControlPanel cp = new ControlPanel();
          cp.SetImage(img);
          Clipboard.SetImage(img);
        }

person N0xus    schedule 21.08.2013    source источник
comment
ну у вас есть Image, вы не можете просто использовать pictureBox.Image = img;?   -  person Jonesopolis    schedule 21.08.2013
comment
Я не уверен, если получу ваш вопрос: ваше приложение находится на экране, и вы хотите, чтобы оно не было видно, когда делается снимок экрана?   -  person Christoph Fink    schedule 21.08.2013
comment
да. Я в основном пытаюсь переделать инструмент для обрезки, который поставляется в комплекте с Windows.   -  person N0xus    schedule 21.08.2013
comment
Тогда почему бы просто не скрыть свое окно до g.CopyFromScreen() и снова показать его после?   -  person Christoph Fink    schedule 21.08.2013
comment
Прежде всего, почему это saveToClipboard логическое значение? Если это ложно, то зачем вам нужно захватывать изображение? Если это всегда верно, то вам вообще не нужно логическое значение здесь!   -  person Sriram Sakthivel    schedule 21.08.2013
comment
Я, в моем проекте больше кода, чем в приведенном выше классе. когда я нажимаю кнопку, моя исчезает, и я могу перетащить прямоугольник, чтобы получить изображение. Теперь я хочу, чтобы данные внутри прямоугольника отображались в окне изображения. Именно с этой частью у меня проблемы.   -  person N0xus    schedule 21.08.2013
comment
Это bool для функциональности, которую мне нужно добавить позже. Пока я просто пытаюсь заставить его работать с буфером обмена.   -  person N0xus    schedule 21.08.2013
comment
не могли бы вы ответить на мой вопрос?   -  person Jonesopolis    schedule 21.08.2013
comment
Прости. Мой код выше сохранен в другом классе, а поле с изображением находится в основной форме. Пытался передать img, но пока безуспешно.   -  person N0xus    schedule 21.08.2013
comment
как насчет создания события, передающего изображение обратно в форму?   -  person Jonesopolis    schedule 21.08.2013
comment
обновил мой код в исходном посте, чтобы показать, что я пытался сделать в отношении вашей идеи, Джонси.   -  person N0xus    schedule 21.08.2013


Ответы (1)


ControlPanel cp = new ControlPanel();
cp.SetImage(img);

это не сработает, потому что вам нужно получить доступ к используемой родительской форме, а не создавать ее новый экземпляр.

Посмотрите на ответ на этот вопрос о создании простого пользовательского события, но добавьте изображение к ProgressEventArgs, которое они создают. Затем в основной форме подпишитесь на событие и обновите изображение.

person Jonesopolis    schedule 21.08.2013