0 / 0 / 0
Регистрация: 11.11.2017
Сообщений: 9

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

11.11.2017, 09:50. Показов 2657. Ответов 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
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru