Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 11.11.2017
Сообщений: 9

Работа со скриншотом экрана в clipboard

11.11.2017, 09:50. Показов 2553. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, вопрос следующий:
нужно узнать значение в RGB палитре заданного пикселя в скриншоте экрана, сделанного посредством нажатия print screen.
Задачу решал так:

сохранял содержимое в файл на диск

Visual Basic
1
SavePicture Clipboard.GetData(vbCFBitmap), "c:\1.bmp"
потом открывал и уже выдергивал значение пикселя в переменную s по координатам (x,y) для разрешения 1600х900

Visual Basic
1
2
3
Open "c:\1.bmp" For Binary As 1
Get #1, ((900- y - 1) * 1600+ (x + 1)) * 3 + 55 , s
Close #1
Но каждый раз записывать и считывать из файла долго, нельзя ли как-нибудь выдергивать значение из RGB палитры напрямую из clipboard'a?

Спасибо.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.11.2017, 09:50
Ответы с готовыми решениями:

Класс Clipboard - ошибка «Requested Clipboard operation did not succeed»
Пытаюсь скопировать текст программно таким образом: Clipboard.SetText("something") Вместо выполнения поручения, он напрочь отказывается...

Работа с clipboard
Добрый день, пытаясь сделать программу появилась проблема. Хочу чтобы при нажатии на кнопку(CopyButton) в буфер копировался текст из...

Работа с Clipboard
Здравствуйте! Заметил, что если скопировать картинку (клик ПКМ->Копировать), в буфер обмена помещается строка с адресом этой картинки. Хочу...

25
0 / 0 / 0
Регистрация: 11.11.2017
Сообщений: 9
13.11.2017, 22:25  [ТС]
Студворк — интернет-сервис помощи студентам
Мне нужен произвольный пиксель, один, поэтому метод The trick не совсем подошел(при увеличении разрешения или подключении монитора увеличивается и массив, и время падает.
Да, я засунул его в цикл.
Насколько я понял, идет постоянное создание, это и вызывает проблему.
Я не владею синтаксисом, поэтому подскажите пожалуйста как конкретно написать Ваш метод.
Спасибо.
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
13.11.2017, 23:12
Visual Basic
1
2
3
4
5
6
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Private Declare Function GetDC Lib "user32.dll" (ByVal hWnd As Long) As Long
 
Private Sub Timer1_Timer()
    BackColor = GetPixel(GetDC(0), 10, 110)   
End Sub
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
14.11.2017, 09:33
SoftIce,
After painting with a common DC, the ReleaseDC function must be called to release the DC. Class and private DCs do not have to be released. ReleaseDC must be called from the same thread that called GetDC. The number of DCs is limited only by available memory.
1
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
14.11.2017, 10:27
Лучший ответ Сообщение было отмечено Gaskon как решение

Решение

Никогда такого не было, и вот опять! (с)
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Private Declare Function GetDC Lib "user32.dll" (ByVal hwnd As Long) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
'Private Declare Function GetDesktopWindow Lib "user32" () As Long
Dim DC As Long
 
Private Sub Form_Load()
   'DC = GetDesktopWindow
    DC = GetDC(0)
End Sub
 
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    Call ReleaseDC(0, DC)
End Sub
 
Private Sub Timer1_Timer()
    BackColor = GetPixel(DC, 10, 110) 'это в цикл, у меня в таймере
End Sub
Пиксель-то хоть не надо освобождать ?
1
14.11.2017, 15:47

Не по теме:

fever brain, ты Правила читал ? Пункт 5.10

Запрещено накручивать репутацию и другую статистику пользователя любым способом, включая создание пользователей-клонов, а также склонять (агитировать) других пользователей к ее изменению.

0
0 / 0 / 0
Регистрация: 11.11.2017
Сообщений: 9
14.11.2017, 19:13  [ТС]
Благодарю, это именно то, что надо.
Я, правда, не совсем понимаю принцип работы GetDC. Видимо мне надо и GetDC заводить в цикл(и Realeas соответственно)?
Таймер не использую по причине некорректной работы системного времени(видимо батареечка на BIOS подсела).
И еще, если я выполняю GetPixel в модуле, мне почему-то опять необходимо вызывать GetDC уже в модуле, иначе выдает другое значение RGB, это специфика этой функции? Я ее прописал как Public в объявлении тоже в модуле.
Не сильно ли это будет подтормаживать, если в модуль программа лезет каждый проход цикла?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.11.2017, 19:13
Помогаю со студенческими работами здесь

Работа с классом Clipboard
Ребят, у меня такая проблема: недавно решил написать программку, которая в частности, работает с буфером обмена: помещает в него список...

Работа с Буфером обмена (Clipboard)
Всем привет! Ребята, в простом не могу найти решение. Подскажите, почему не работает. Мне нужно скопировать в "Буфер...

Работа с Clipboard. Как убрать мерцающую рамку?
При работе (Excel)макроса, внутри создаваемого документа происходит запись в Clipboard. При просмотре документа последняя скопированная в...

Ошибка при работе с Clipboard: "Сannot open clipboard. Отказано в доступе."
Хотел написать программу для автоматической замены текста в буфере обмена, но при обращении к буферу получаю ошибку "Сannot open...

Работа с разрешением экрана
Здравствуйте! Столкнулась с такой проблемой. Нужно создать cmd-файл для изменения разрешения экрана, и записать параметры текущего...


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

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru