Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
79 / 72 / 4
Регистрация: 05.01.2016
Сообщений: 288

Скриншот PictureBox без областей окна

22.07.2016, 19:13. Показов 2193. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе время суток вам.
На форме есть PictureBox1 и Label1, Label2 (это кнопки: сохранить и снимок)
PictureBox1 сделан прозрачный на форме см скрин.


Делаю скриншот выходит так:


Как это убрать?
То есть чтоб снимок получался без интерфейса и рамок программы.

Вот кусок кода:

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
    Private Sub Label1_Click(sender As Object, e As EventArgs) Handles Label1.Click
        SaveFileDialog1.Filter = "JPG|*.jpg"
        If SaveFileDialog1.ShowDialog = DialogResult.Cancel Then Exit Sub
        PictureBox2.Image.Save(SaveFileDialog1.FileName)
    End Sub
 
    Private Sub Label2_Click(sender As Object, e As EventArgs) Handles Label2.Click
        Dim b As New Bitmap(PictureBox2.Width, PictureBox2.Height, System.Drawing.Imaging.PixelFormat.Format32bppRgb)
        a = Graphics.FromImage(b)
        a.Clear(Color.FromArgb(13, 11, 12))
        a.CopyFromScreen(Me.Location.X, Me.Location.Y, 0, 0, New Size(PictureBox2.Width, PictureBox2.Height))
        PictureBox2.Image = b
    End Sub
Вот сделанный снимок:


Код брал с этого форума.
Суть программы; делать скриншот в рамке (рамку можно растягивать)
Заранее спасибо.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.07.2016, 19:13
Ответы с готовыми решениями:

Скриншот активного окна
Скриншот экрана я знаю как сделать, но как сделать скриншот активного окна? Dim bmp As Bitmap = New...

Сделать скриншот окна
Доброе время суток. Подскажите пожалуйста, как получить скрин всего окна и сохранить полученную картинку в папку?

Скриншот окна стороннего приложения
Добрый день! Подскажите, как сделать фото участка программы, зная не хэндл, а полный путь к программе? Потому что разработчики того,...

22
79 / 72 / 4
Регистрация: 05.01.2016
Сообщений: 288
22.07.2016, 19:24  [ТС]
Вообще была идея сделать как в бандикаме рамку. Но не вышло сделал так.
В планах и видео захват
0
47 / 47 / 7
Регистрация: 26.12.2014
Сообщений: 189
22.07.2016, 19:40
VB.NET
1
Me.FormBorderStyle = Windows.FormBorderStyle.None
Добавлено через 8 минут
Вообще надо подругому.
0
79 / 72 / 4
Регистрация: 05.01.2016
Сообщений: 288
22.07.2016, 19:44  [ТС]
Цитата Сообщение от godmode Посмотреть сообщение
Вообще надо подругому
Как тогда?

Добавлено через 33 секунды
Цитата Сообщение от godmode Посмотреть сообщение
Windows.FormBorderStyle
Ошибку выдает
0
79 / 72 / 4
Регистрация: 05.01.2016
Сообщений: 288
22.07.2016, 19:49  [ТС]
Вот исходник:
ScreenshotV1.rar
0
47 / 47 / 7
Регистрация: 26.12.2014
Сообщений: 189
22.07.2016, 20:31
17Vasya17
Если меня не отвлекут, будет сегодня.
0
79 / 72 / 4
Регистрация: 05.01.2016
Сообщений: 288
23.07.2016, 10:03  [ТС]
Вот в загашниках своих нашол (не помню от куда)

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Integer, ByVal dwExtraInfo As Integer)
    Private Const VK_SNAPSHOT As Short = &H2CS
 
 
    Public Function SaveScreen(ByVal theFile As String) As Boolean
        Dim data As IDataObject
        data = Clipboard.GetDataObject()
        Dim bmap As Bitmap
        If data.GetDataPresent(GetType(System.Drawing.Bitmap)) Then
            bmap = CType(data.GetData(GetType(System.Drawing.Bitmap)), Bitmap)
            Me.PictureBox2.Image = bmap
            Me.PictureBox2.Image.Save(theFile, Imaging.ImageFormat.Jpeg)
        End If
    End Function
 
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Call keybd_event(System.Windows.Forms.Keys.Snapshot, 0, 0, 0)
        System.Threading.Thread.Sleep(200)
        SaveFileDialog1.Filter = "JPG|*.jpg"
        If SaveFileDialog1.ShowDialog = DialogResult.Cancel Then Exit Sub
        SaveScreen(SaveFileDialog1.FileName)
    End Sub
Добавлено через 3 минуты
Может кому пригодится

Добавлено через 13 часов 0 минут
Цитата Сообщение от 17Vasya17 Посмотреть сообщение
Вот в загашниках своих нашол (не помню от куда)
Но тут к сожалению только всего экрана выходит
0
 Аватар для Petr_S
213 / 230 / 87
Регистрация: 21.04.2013
Сообщений: 404
23.07.2016, 12:27
17Vasya17, честно, особо не разбирался, но
VB.NET
1
a.CopyFromScreen(Me.Location.X, Me.Location.Y, 0, 0, New Size(PictureBox2.Width, PictureBox2.Height))
похоже, что ошибка в координатах. Они считаются от угла формы (Me.Location), а надо от угла PictureBox, т.е. что-то типа Me.Location.X + PictureBox1.Location.X и для Y тоже самое.
0
79 / 72 / 4
Регистрация: 05.01.2016
Сообщений: 288
23.07.2016, 12:41  [ТС]
Petr_S
Сделал так:
VB.NET
1
a.CopyFromScreen(Me.Location.X, PictureBox2.Location.X, Me.Location.Y, PictureBox2.Location.Y, New Size(PictureBox2.Width, PictureBox2.Height))
Но скрин не по центру
0
 Аватар для Petr_S
213 / 230 / 87
Регистрация: 21.04.2013
Сообщений: 404
23.07.2016, 13:00
17Vasya17, я же писАл:
Me.Location.X + PictureBox.Location.X
Me.Location.Y + PictureBox.Location.Y
PictureBox - та изображение под которой Вы копируете.
0
79 / 72 / 4
Регистрация: 05.01.2016
Сообщений: 288
23.07.2016, 13:29  [ТС]
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Public Class Form1
    Dim a As Graphics
    Private Sub Label7_MouseDown(sender As Object, e As MouseEventArgs) Handles Label7.MouseDown
        Dim b As New Bitmap(PictureBox2.Width, PictureBox2.Height, System.Drawing.Imaging.PixelFormat.Format32bppRgb)
        a = Graphics.FromImage(b)
        a.Clear(Color.FromArgb(13, 11, 12))
        'a.CopyFromScreen(Me.Location.X, Me.Location.Y, 0, 0, New Size(PictureBox2.Width, PictureBox2.Height))
        a.CopyFromScreen(Me.Location.X, PictureBox2.Location.X + 0, Me.Location.Y, PictureBox2.Location.Y + 0, New Size(PictureBox2.Width, PictureBox2.Height))
        PictureBox2.Image = b
        SaveFileDialog1.Filter = "JPG|*.jpg"
        If SaveFileDialog1.ShowDialog = DialogResult.Cancel Then Exit Sub
        PictureBox2.Image.Save(SaveFileDialog1.FileName)
    End Sub
End Class
Label7 это кнопка, на Form1 сделал PictureBox2 прозрачным
код на рабит как надо

Добавлено через 27 минут
Ну если честно есть другие вариант?
1- Рамку можно растягивать
2- Скрин выходил только что в рамке как в бандикаме
0
 Аватар для Petr_S
213 / 230 / 87
Регистрация: 21.04.2013
Сообщений: 404
23.07.2016, 14:27
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Public Class Form1
    Dim a As Graphics
    Private Sub Label7_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) Handles Label7.MouseDown
        Dim b As New Bitmap(PictureBox2.Width, PictureBox2.Height, System.Drawing.Imaging.PixelFormat.Format32bppRgb)
        a = Graphics.FromImage(b)
        a.Clear(Color.FromArgb(13, 11, 12))
        Dim r As Rectangle = Me.RectangleToScreen(Me.ClientRectangle)
        a.CopyFromScreen(r.X + PictureBox2.Location.X, r.Y + PictureBox2.Location.Y, 0, 0, New Size(PictureBox2.Width, PictureBox2.Height))
        PictureBox1.Image = b
        'SaveFileDialog1.Filter = "JPG|*.jpg"
        'If SaveFileDialog1.ShowDialog = DialogResult.Cancel Then Exit Sub
        'PictureBox2.Image.Save(SaveFileDialog1.FileName)
    End Sub
End Class
На скриншоте:
- слева до нажатия Label7;
- справа после.
Миниатюры
Скриншот PictureBox без областей окна  
2
79 / 72 / 4
Регистрация: 05.01.2016
Сообщений: 288
23.07.2016, 14:40  [ТС]
Petr_S
Во то что надо. Спасибо.
Сделал так:

VB.NET
1
2
3
4
5
6
7
8
9
10
11
    Private Sub Label8_MouseDown(sender As Object, e As MouseEventArgs) Handles Label8.MouseDown
        Dim b As New Bitmap(PictureBox2.Width, PictureBox2.Height, System.Drawing.Imaging.PixelFormat.Format32bppRgb)
        a = Graphics.FromImage(b)
        a.Clear(Color.FromArgb(13, 11, 12))
        Dim r As Rectangle = Me.RectangleToScreen(Me.ClientRectangle)
        a.CopyFromScreen(r.X + PictureBox2.Location.X, r.Y + PictureBox2.Location.Y, 0, 0, New Size(PictureBox2.Width, PictureBox2.Height))
        PictureBox3.Image = b
        SaveFileDialog1.Filter = "JPG|*.jpg"
        If SaveFileDialog1.ShowDialog = DialogResult.Cancel Then Exit Sub
        PictureBox3.Image.Save(SaveFileDialog1.FileName)
    End Sub
PictureBox3 просто спрятал от пользователя
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4356 / 3426 / 512
Регистрация: 27.01.2014
Сообщений: 6,254
23.07.2016, 15:55
а PictureBox1.DrawToBitmap там существует? могу ошибаться. посмотреть нет сейчас возможности.
0
47 / 47 / 7
Регистрация: 26.12.2014
Сообщений: 189
23.07.2016, 19:35
17Vasya17
Каждый такой скрин увеличивает память приложения примерно на 5мб, что не ок. В бандикаме такого не происходит.
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4356 / 3426 / 512
Регистрация: 27.01.2014
Сообщений: 6,254
24.07.2016, 09:09
память освобождать надо после каждой операции.
1
79 / 72 / 4
Регистрация: 05.01.2016
Сообщений: 288
24.07.2016, 09:51  [ТС]
Цитата Сообщение от Yury Komar Посмотреть сообщение
память освобождать надо
А как это делать?
0
47 / 47 / 7
Регистрация: 26.12.2014
Сообщений: 189
24.07.2016, 12:14
Yury Komar
Dispose не спасает ситуации.
Судя повсему там чистое вин апи.
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4356 / 3426 / 512
Регистрация: 27.01.2014
Сообщений: 6,254
24.07.2016, 13:15
вы правы, надо через WinApi...
0
79 / 72 / 4
Регистрация: 05.01.2016
Сообщений: 288
24.07.2016, 17:57  [ТС]
А такой метод не поможет?
VB.NET
1
Clipboard.Clear()
Удаления из буфера
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.07.2016, 17:57
Помогаю со студенческими работами здесь

Скриншот окна программы и сохранение в файл
Здравствуйте! У меня такой вопрос: Сделал программку перевода в системах счисления. Всё Слава БОГУ работает. Вопрос такой: Можно ли...

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

Координаты областей на picturebox для разных событий
Здравствуйте! Есть PictureBox с рисунком. Нужно, чтобы при кликах на разных местах этого рисунка выполнялись различные действия (открытие...

Координаты областей на picturebox для разных событий
Здравствуйте! Есть PictureBox с рисунком. Нужно, чтобы при кликах на разных местах этого рисунка выполнялись различные действия (открытие...

Скриншот области в pictureBox
Подскажите, где ошибка и как исправить? На нажатие кнопки в pictureBox должен попадать скриншот заданной области. Но при нажатии...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru