Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 Аватар для Strannik_san
7 / 7 / 0
Регистрация: 07.09.2019
Сообщений: 207

Ошибка в скриншоте

21.10.2024, 10:34. Показов 494. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени уважаемые форумчане.Подскажите почему может выходить ошибка в этом коде через некоторое время после запуска.Ошибка не цикличная,а может происходить в любой момент времени.Может проработать и час и три программа,а может сразу через несколько минут выскочить ошибка.Вот собственно код найденный на просторах интернета и
VB.NET Скопировано
1
2
3
4
5
6
7
 Function ScreenshotForm() As Bitmap
        Dim screensize As Size = New Size(My.Computer.Screen.Bounds.Width, My.Computer.Screen.Bounds.Height)
        Dim screenshot As New Bitmap(My.Computer.Screen.Bounds.Width, My.Computer.Screen.Bounds.Height)
        Dim g As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(screenshot)
        g.CopyFromScreen(New Point(0, 0), New Point(0, 0), screensize)
        Return screenshot
    End Function
.Ошибка происходит в этой строке
VB.NET Скопировано
1
g.CopyFromScreen(New Point(0, 0), New Point(0, 0), screensize)
Вызываю эту функцию в таймере с интервалом стандартным.Вызываю так
VB.NET Скопировано
1
PictureBox2.BackColor = ScreenshotForm().GetPixel(TextBox14.Text, TextBox13.Text)
В текстбоксах значения есть до вызова этой функции.Ошибка которая вылетает показана на скринах.
Миниатюры
Ошибка в скриншоте   Ошибка в скриншоте  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.10.2024, 10:34
Ответы с готовыми решениями:

Задача на скриншоте

Задача на скриншоте
Не получилось скопировать текст, просто сделал скрин задачи

Задание на скриншоте
https://yapx.ru/v/EPZVu

7
Администратор
Эксперт .NET
 Аватар для OwenGlendower
17898 / 13994 / 5345
Регистрация: 17.03.2014
Сообщений: 28,652
Записей в блоге: 1
21.10.2024, 10:53
Strannik_san, вероятно программа упирается в лимит дескрипторов GDI. Попробуйте Dispose()-ть объект Graphics
VB.NET Скопировано
1
2
3
4
5
6
7
8
Function ScreenshotForm() As Bitmap
    Dim screensize As Size = New Size(My.Computer.Screen.Bounds.Width, My.Computer.Screen.Bounds.Height)
    Dim screenshot As New Bitmap(My.Computer.Screen.Bounds.Width, My.Computer.Screen.Bounds.Height)
    Using g As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(screenshot)
        g.CopyFromScreen(New Point(0, 0), New Point(0, 0), screensize)
        Return screenshot
    End Using
End Function
0
 Аватар для Strannik_san
7 / 7 / 0
Регистрация: 07.09.2019
Сообщений: 207
21.10.2024, 12:15  [ТС]
OwenGlendower, Тоже самое.Может как-то возможно обработать это исключение через Try и при возникновение сделать как бы перезапуск этой функции?
Миниатюры
Ошибка в скриншоте  
0
Любитель
 Аватар для Тим70
1023 / 722 / 158
Регистрация: 27.01.2019
Сообщений: 1,483
21.10.2024, 14:25
Strannik_san, Когда то интересовался тем же.
Зтот код отлично снимает весь экран,попробуйте
VB.NET Скопировано
1
2
3
4
5
6
7
8
9
  Public Function GetScreenShot() As Image
        bounds1 = Screen.PrimaryScreen.Bounds
      Dim screenshot As New Bitmap(bounds1.Width, bounds1.Height, System.Drawing.Imaging.PixelFormat.Format32bppRgb)
        Using graph As Graphics = Graphics.FromImage(screenshot)
 
            graph.CopyFromScreen(0, 0, 0, 0, bounds1.Size, CopyPixelOperation.SourceCopy) ' Сфоткать часть экрана, вписаную в Rectangle
         Return screenshot
        End Using
    End Function
Добавлено через 1 минуту
да и
VB.NET Скопировано
1
 Dim bounds1 As Rectangle
1
Администратор
Эксперт .NET
 Аватар для OwenGlendower
17898 / 13994 / 5345
Регистрация: 17.03.2014
Сообщений: 28,652
Записей в блоге: 1
21.10.2024, 15:06
Лучший ответ Сообщение было отмечено Strannik_san как решение

Решение

Strannik_san, Bitmap тоже нужно Dispose()-ить. Исходя из того что вам нужен только цвет одного пиксела, код можно переписать так:
VB.NET Скопировано
1
2
3
4
5
6
7
8
9
Function ScreenshotForm() As Color
    Dim screensize As Size = New Size(My.Computer.Screen.Bounds.Width, My.Computer.Screen.Bounds.Height)
    Using screenshot As New Bitmap(My.Computer.Screen.Bounds.Width, My.Computer.Screen.Bounds.Height)
        Using g As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(screenshot)
            g.CopyFromScreen(New Point(0, 0), New Point(0, 0), screensize)
            Return screenshot.GetPixel(TextBox14.Text, TextBox13.Text)
        End Using
    End Using
End Function
Вызов
VB.NET Скопировано
1
PictureBox2.BackColor = ScreenshotForm()
Если цвет одного пиксела, это всё что вас интересует, то код еще можно (нужно!) улучшить путем использования Windows API чтобы сразу получать цвет одного пиксела. По идее BitBlt с GetPixel нужно применять. В связке с GetDC, ReleaseDC.
2
 Аватар для Strannik_san
7 / 7 / 0
Регистрация: 07.09.2019
Сообщений: 207
21.10.2024, 16:12  [ТС]
OwenGlendower, Спасибо ошибка вроде пропала.Но как использовать эту функцию по всему коду.Потому-что здесь:
VB.NET Скопировано
1
Return screenshot.GetPixel(TextBox14.Text, TextBox13.Text)
не должна быть привязка к значениям этих текстбоксов.У меня вызывается эта функция и в другом куске программы
VB.NET Скопировано
1
PictureBox5.BackColor = ScreenshotForm().GetPixel(TextBox5.Text, TextBox3.Text)
и если я буду вызывать эту функцию как вы посоветовали
VB.NET Скопировано
1
PictureBox5.BackColor = ScreenshotForm()
то она будет возвращать мне значения с координатами 14 и 13 текстобокса.

Добавлено через 16 минут
Хотя нет.Вы правы если эта функция будет работает постоянно по таймеру. С нужными координатами,то вызов её из другого куска программы может дать некорректные данные.То я думая лучше написать ещё одну подобную функцию и уже её вызывать по мере необходимости не затрагивая эту.
0
 Аватар для Andrey-MSK
3160 / 2057 / 375
Регистрация: 14.08.2018
Сообщений: 6,756
Записей в блоге: 4
21.10.2024, 16:12
Strannik_san, Ну дак включите в неё параметры
VB.NET Скопировано
1
Function ScreenshotForm(text1 As string, text2 As string) As Color
И передайте куда надо
VB.NET Скопировано
1
Return screenshot.GetPixel(text1, text2)
1
 Аватар для Strannik_san
7 / 7 / 0
Регистрация: 07.09.2019
Сообщений: 207
21.10.2024, 16:18  [ТС]
Andrey-MSK, Это уже сделал.Дошло.Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.10.2024, 16:18
Помогаю со студенческими работами здесь

Задание на скриншоте
https://yapx.ru/v/EPZVu

Поиск изображения на скриншоте
Как сделать скриншот экрана и найти координаты изображения по образцу. Имеется изображение кнопки, нужно найти координаты этой кнопки на...

Распознать буквы на скриншоте
Мне нужно сделать программу, которая будет читать текст и распознавать всякие образы на скриншотах. Я знаю, OCR - одна из самых...

Название плагина на скриншоте
Помогите найти jQuery плагин с видом и функционалом, как на скриншоте. Прикрепляйте файлы и изображения к сообщениям. ...

Так как на скриншоте
Excel пользуюсь недавно. Помогите сделать также, как на скриншоте (Оооочень надо :help:). Если можно, то пошаговое описание.


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Результаты исследования от команды MCM (март 2025 г.)
Programma_Boinc 07.04.2025
Результаты исследования от команды MCM (март 2025 г. ) В рамках наших текущих исследований мы продолжаем изучать гены, которые имеют наибольшую вероятность развития рака легких, выявленные в рамках. . .
Рекурсивные типы в Python
py-thonny 07.04.2025
Рекурсивные типы - это типы данных, которые определяются через самих себя или в сочетании с другими типами, которые в свою очередь ссылаются на исходный тип. В мире программирования такие структуры. . .
C++26: Объединение и конкатенация последовательностей и диапазонов в std::ranges
NullReferenced 07.04.2025
Работа с последовательностями данных – одна из фундаментальных задач, с которой сталкивается каждый разработчик. C++ прошел длинный путь в эволюции средств для манипуляции коллекциями – от. . .
Обмен данными в микросервисной архитектуре
ArchitectMsa 06.04.2025
Когда разработчики начинают погружаться в мир микросервисов, они часто сталкиваются с парадоксальным правилом: "два сервиса не должны делить один источник данных". Эта мантра звучит повсюду в. . .
PostgreSQL в Kubernetes: Автоматизация обслуживания с CNPG
Mr. Docker 06.04.2025
Администраторы баз данных сталкиваются с целым рядом проблем при обслуживании PostgreSQL в Kubernetes: как обеспечить правильную репликацию данных, как настроить автоматическое переключение при. . .
Async/await в TypeScript
run.dev 06.04.2025
Асинхронное программирование — это подход к разработке программного обеспечения, при котором операции выполняются независимо друг от друга. В отличие от синхронного выполнения, где каждая последующая. . .
Многопоточность в C#: Синхронизация потоков
UnmanagedCoder 06.04.2025
Многопоточное программирование стало неотъемлемой частью разработки современных приложений на C#. С появлением многоядерных процессоров возможность выполнять несколько задач параллельно значительно. . .
TypeScript: Классы и конструкторы
run.dev 06.04.2025
TypeScript, как статически типизированный язык, построенный на основе JavaScript, привнес в веб-разработку новый уровень надежности и структурированности кода. Одним из важнейших элементов этой. . .
Многопоточное программирование: Rust против C++
golander 06.04.2025
C++ существует уже несколько десятилетий и его поддержка параллелизма постепенно наращивалась со временем. Начиная с C++11, язык получил стандартную библиотеку для работы с потоками, а в последующих. . .
std::vector в C++: от основ к оптимизации производительности
NullReferenced 05.04.2025
Для многих программистов знакомство с std::vector происходит на ранних этапах изучения языка, но между базовым пониманием и подлинным мастерством лежит огромная дистанция. Контейнер std::vector. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер