DrawToBitmap не сохраняет рисунок с контрола Panel

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

aave
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 17
Зарегистрирован: 08.08.2012 (Ср) 8:37

DrawToBitmap не сохраняет рисунок с контрола Panel

Сообщение aave » 16.08.2012 (Чт) 11:09

Добрый день! Столкнулся с такой проблемой. Я строю график на форме, на контроле Panel. Хочу сохранить снимок формы в файл. Пишу следующее:

Код: Выделить всё
Dim wid As Integer = MyBase.Width
            Dim hgt As Integer = MyBase.Height
            Dim bm As New Bitmap(wid, hgt)
            MyBase.DrawToBitmap(bm, New Rectangle(0, 0, wid, hgt))


Сохраняется картинка формы, но контрол Panel в графическом файле пуст -- как задано в начальных настройках (см.вложение).

Кто знает, как сделать так, чтобы нарисованный на панели график сохранялся в графическом файле?
Вложения
Graph19870602UTC220000AL77MAG.jpg
Graph19870602UTC220000AL77MAG.jpg (88.7 Кб) Просмотров: 3586
Буду рад видеть вас в моём блоге SolTau.ru, посвящённом технике и технологиям!

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 16.08.2012 (Чт) 12:05

aave писал(а):Сохраняется картинка формы, но контрол Panel в графическом файле пуст -- как задано в начальных настройках (см.вложение).

Потому что то, что ты рисуешь, стирается при обычном сворачивании или если прото прикрыть форму другим окном. Попробуй рисовать в обработчике события Paint панели и расовать через e.Graphics (не уверен, поможет ли).

aave писал(а):Хочу сохранить снимок формы в файл.

Можно использовать сздание картинки с экрана. Хотя, тут есть соответствующие тонкости.

aave
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 17
Зарегистрирован: 08.08.2012 (Ср) 8:37

Re: DrawToBitmap не сохраняет рисунок с контрола Panel

Сообщение aave » 16.08.2012 (Чт) 12:16

Можно использовать сздание картинки с экрана. Хотя, тут есть соответствующие тонкости.


В принципе, эта задача мной уже решена следующим образом:

Код: Выделить всё
Private Declare Auto Function BitBlt Lib "gdi32.dll" (ByVal hdcDest As IntPtr, _
                                                          ByVal nXDest As Integer, ByVal nYDest As Integer, _
                                                          ByVal nWidth As Integer, ByVal nHeight As Integer, _
                                                          ByVal hdcSrc As IntPtr, _
                                                          ByVal nXSrc As Integer, ByVal nYSrc As Integer, _
                                                          ByVal dwRop As System.Int32) As Boolean
Private Const SRCCOPY As Integer = &HCC0020

Private Function SaveImageToFile() As Bitmap
        Dim gr As Graphics = Me.CreateGraphics
        Dim resBitmap As New Bitmap(Me.Width, Me.Height, gr)
        Dim bm_gr As Graphics = Graphics.FromImage(resBitmap)
        Dim bm_hdc As IntPtr = bm_gr.GetHdc
        Dim me_hdc As IntPtr = gr.GetHdc
        BitBlt(bm_hdc, 0, 0, Me.ClientSize.Width, Me.ClientSize.Height, _
        me_hdc, 0, 0, SRCCOPY)
        gr.ReleaseHdc(me_hdc)
        bm_gr.ReleaseHdc(bm_hdc)
        Return resBitmap
End Function


Мне просто хотелось бы что-то более простое, а именно - DrawToBitmap, раз уж этот функционал есть в .NET.

Попробуй рисовать в обработчике события Paint панели и расовать через e.Graphics

Попробую.
Буду рад видеть вас в моём блоге SolTau.ru, посвящённом технике и технологиям!

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 16.08.2012 (Чт) 12:42

aave писал(а):В принципе, эта задача мной уже решена следующим образом:

Ой, ёёёёёёё... В .NET есть встроенные возможности захвата экрана. Graphics.FromScreen, если не ошибаюсь.

PS: Старайся называть функции более логично, и ставить скобки при вызове функций (нео не свойств).

aave
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 17
Зарегистрирован: 08.08.2012 (Ср) 8:37

Re: DrawToBitmap не сохраняет рисунок с контрола Panel

Сообщение aave » 16.08.2012 (Чт) 12:58

Qwertiy писал(а):Ой, ёёёёёёё... В .NET есть встроенные возможности захвата экрана. Graphics.FromScreen, если не ошибаюсь.

А, Graphics.CopyFromScreen! Получилось заметно проще, спасибо!!
Буду рад видеть вас в моём блоге SolTau.ru, посвящённом технике и технологиям!

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 16.08.2012 (Чт) 13:50

aave писал(а):А, Graphics.CopyFromScreen! Получилось заметно проще, спасибо!!

Кстати, а твой код с окнами имеющими расширенные стили работает? А то .NET'овский метод нет...

aave
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 17
Зарегистрирован: 08.08.2012 (Ср) 8:37

Re: DrawToBitmap не сохраняет рисунок с контрола Panel

Сообщение aave » 17.08.2012 (Пт) 9:59

Qwertiy писал(а):Кстати, а твой код с окнами имеющими расширенные стили работает? А то .NET'овский метод нет...

Да, он полностью сохраняет форму как есть. А с помощью Graphics.CopyFromScreen вот что получилось:
Изображение

Спасибо за отличную наводку!
Буду рад видеть вас в моём блоге SolTau.ru, посвящённом технике и технологиям!

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 17.08.2012 (Пт) 17:30

aave писал(а):Да, он полностью сохраняет форму как есть.

Нет, я не про форму. С ней всё понятно. Просто Graphics.CopyFromScreen не работает с окнами, имеющими расширенные стили, например, окном Квипа. Вот я и спросил, написанный тобой код работает с ними корректно или нет?

aave писал(а):Спасибо за отличную наводку!

Не за что. А рисовать в обработчика события панели (заменив вызов CreateGraphics на e.Graphics) попробовал?

aave
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 17
Зарегистрирован: 08.08.2012 (Ср) 8:37

Re: DrawToBitmap не сохраняет рисунок с контрола Panel

Сообщение aave » 20.08.2012 (Пн) 9:59

Нет, я не про форму. С ней всё понятно. Просто Graphics.CopyFromScreen не работает с окнами, имеющими расширенные стили, например, окном Квипа. Вот я и спросил, написанный тобой код работает с ними корректно или нет?

Не проверял, если честно. И с e.Graphics тоже не пробовал. Что это даст?
Буду рад видеть вас в моём блоге SolTau.ru, посвящённом технике и технологиям!

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 20.08.2012 (Пн) 10:19

aave писал(а):И с e.Graphics тоже не пробовал. Что это даст?

Подозреваю, что то, что ты в самом начале хотел - возможность рисования формы через DrawToBitmap. Но тоже не проверял :)


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 44

    TopList