Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как узнать цвет в месте положения курсора(мыши)? 
:(
    Опции темы
I_Am_Rock
Дата 23.1.2008, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 523
Регистрация: 18.1.2008

Репутация: 12
Всего: 15



Всем привет!

Скажите, пожалуйста:
Как узнать цвет в месте (p.x, p.y)?

Код

Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

Private Type POINTAPI
        x As Long
        y As Long
End Type

Dim p As POINTAPI

Private Sub Timer1_Timer()
GetCursorPos p
Text1.Text = p.x
Text2.Text = p.y
End Sub

PM MAIL WWW   Вверх
Akina
Дата 23.1.2008, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Цитата(MSDN: Platform SDK: Windows GDI )

GetPixel

The GetPixel function retrieves the red, green, blue (RGB) color value of the pixel at the specified coordinates. 

Код

COLORREF GetPixel(
  HDC hdc,    // handle to DC
  int nXPos,  // x-coordinate of pixel
  int nYPos   // y-coordinate of pixel
);




--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
BorisVorontsov
Дата 23.1.2008, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Thinker
**


Профиль
Группа: Комодератор
Сообщений: 714
Регистрация: 3.11.2005
Где: Молдавия, г. Киши нёв

Репутация: 5
Всего: 10



Вот только Akina не подумал, где бедному I_Am_Rock'у брать DC...

I_Am_Rock, какова цель? В пределах PictureBox или Form достаточно использовать Point.
Так же можно сделать снимок экрана в свой контекст и получить цвет тем же Point. Но если эти варианты не подходят -- то цепочка примерно такая:

GetCursorPos->WindowFromPint->GetWindowDC->GetPixel


--------------------
[code=cpp]
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;
[/code]
PM MAIL ICQ GTalk   Вверх
Dexx
Дата 23.1.2008, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 292
Регистрация: 13.6.2005

Репутация: 5
Всего: 7



Код

Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
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" (ByVal hwnd As Long) As Long


Private Type POINTAPI
        x As Long
        y As Long
End Type

Dim p As POINTAPI

Private Sub Timer1_Timer()
GetCursorPos p
Text1.Text = p.x
Text2.Text = p.y

Text3.Text = CStr(GetPixel(GetDC(0), p.x, p.y))

End Sub



Добавлено через 3 минуты и 7 секунд
Цвет любой точки экрана


--------------------

PM   Вверх
I_Am_Rock
Дата 23.1.2008, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 523
Регистрация: 18.1.2008

Репутация: 12
Всего: 15



Буду пробовать...

Всем большое спасибо!
PM MAIL WWW   Вверх
BorisVorontsov
Дата 23.1.2008, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Thinker
**


Профиль
Группа: Комодератор
Сообщений: 714
Регистрация: 3.11.2005
Где: Молдавия, г. Киши нёв

Репутация: 5
Всего: 10



Цитата(Dexx @  23.1.2008,  16:55 Найти цитируемый пост)
GetDC(0)


А ты в курсе, что
Цитата(MSDN)
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. 



--------------------
[code=cpp]
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;
[/code]
PM MAIL ICQ GTalk   Вверх
Dexx
Дата 23.1.2008, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 292
Регистрация: 13.6.2005

Репутация: 5
Всего: 7



Мож тогда так
Код

Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
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" (ByVal hwnd As Long) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
Private Type POINTAPI
        x As Long
        y As Long
End Type
Dim p As POINTAPI
Dim myDC As Long

Private Sub Form_Load()
myDC = GetDC(0)
End Sub

Private Sub Form_Unload(Cancel As Integer)
ReleaseDC 0, myDC
End Sub

Private Sub Timer1_Timer()


GetCursorPos p
Text1.Text = p.x
Text2.Text = p.y

Text3.Text = CStr(GetPixel(myDC, p.x, p.y))

End Sub




--------------------

PM   Вверх
Akina
Дата 23.1.2008, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Цитата(BorisVorontsov @  23.1.2008,  17:50 Найти цитируемый пост)
Вот только Akina не подумал, где бедному I_Am_Rock'у брать DC...

Я обычно думаю, что либо человеку достаточно направления, и он по нему пройдет, либо тему надо отправить в "Центр помощи".


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0577 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.