Узнать цвет точки на невидимой картинке?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Juriev
Новичок
Новичок
 
Сообщения: 38
Зарегистрирован: 25.11.2003 (Вт) 21:13

Узнать цвет точки на невидимой картинке?

Сообщение Juriev » 13.04.2004 (Вт) 21:45

Подскажите, как узнать цвет точки на картинке в данный момент закрытой другим окном или находящейся за границей окна?
Спасибо!

Faust
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 649
Зарегистрирован: 29.12.2003 (Пн) 13:38
Откуда: лаборатория

Сочувствую...

Сообщение Faust » 14.04.2004 (Ср) 9:14

И я таким был... Забудь про .Point , он будет стабильно сообщать тебе о том, что точка имеет цвет -1. Советую использовать API-функцию GetPixel, которая работает с hDC. Если "не дружишь" с API - то где-то на форуме была ссылка на полезную программу API Guide.
Листинги не горят!

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Re: Сочувствую...

Сообщение A.A.Z. » 14.04.2004 (Ср) 16:51

Кто-то сказал API? :)

Faust писал(а):где-то на форуме была ссылка на полезную программу API Guide.

Подробные описания и объявления API-функций:

API-Guide
Есть 900 с чем-то функций и процедур, есть описания параметров и возвращаемых значений, есть на каждую функцию / процедуру пример.
http://users.chello.be/cr27630/3.7/agsetup.exe
Для новых функций:
File->Internet Update->Next->New Data Pack->Next->Finish
Для русского языка:
File->Internet Update->Next->Russian Language Pack->Next->Finish

API-Viewer
Больше функций и процедур (ок. 5000), есть константы (ок. 50000), но нет описаний и примеров.
http://www.activevb-archiv.de/downloads ... pv2003.exe
Русский язык:
http://www.activevb-archiv.de/downloads ... ussian.exe

API-List
Есть функции / процедуры .NET; он-лайн.
http://www.mentalis.org/apilist/apilist.php

API-справочник на русском
Функции самые основные, т.е. их не очень много. Но всё равно полезно.
http://bbs.vbstreets.ru/download.php?id=703


ЗЫ зайти на http://www.allapi.net (http://www.mentalis.org) - там очень много интересного!

ЗЗЫ зайти в секретное место

ЗЗЗЫ зайти в еще одно секретное место
Нет меня больше

Juriev
Новичок
Новичок
 
Сообщения: 38
Зарегистрирован: 25.11.2003 (Вт) 21:13

Сообщение Juriev » 14.04.2004 (Ср) 19:48

Private Declare Function GetPicsel Lib "gdi32.dll" (ByVal hds As Long, ByVal x As Long, ByVal y As Long)

Private Sub pic_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
Label1.Caption = GetPicsel(pic.hDC, x, y)
End Sub
'Сообщает - не могу найти точку входа в gdi32.dll
'Прошу помощи!!! Что в коде не так?

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 14.04.2004 (Ср) 19:50

Juriev писал(а):Private Declare Function GetPicsel Lib "gdi32.dll" (ByVal hds As Long, ByVal x As Long, ByVal y As Long)

Private Sub pic_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
Label1.Caption = GetPicsel(pic.hDC, x, y)
End Sub
'Сообщает - не могу найти точку входа в gdi32.dll
'Прошу помощи!!! Что в коде не так?

должно быть GetPixel
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 14.04.2004 (Ср) 19:53

Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long

Private Sub pic_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
Label1.Caption = GetPixel(pic.hdc, x / 15, y / 15)
End Sub

Cyrax: его код даже с GetPixel не работает :)

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 14.04.2004 (Ср) 20:00

а он и не будет работать, потому что x и y, скорее всего, в твипах
а, черт с ним, с кодом... я домой пошел - спать :)
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 14.04.2004 (Ср) 20:03

Ну да, точно, в твипах... Спокойной ночи, Cyrax!

А Juriev я могу посоветовать поподробнее изучить синтаксис вызова API-функций... Он очень строгий, и "вариации", как в Вашем коде, недопустимы.

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 14.04.2004 (Ср) 21:04

Нет, почему, допустимы, но тогда нужно настоящий Alias указывать.
Declare Function GetPicsel Lib "gdi32" Alias "GetPixel" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Нет меня больше

Juriev
Новичок
Новичок
 
Сообщения: 38
Зарегистрирован: 25.11.2003 (Вт) 21:13

Сообщение Juriev » 14.04.2004 (Ср) 21:42

Господа, спасибо!
Посмеялся я над своим GetPicsel-ом (ляп от недосыпания, наверно).
И еще для меня польза от этой беседы - очень доходчиво объяснили, зачем и что такое Alias. В книге у меня это описано не понятно.

Кирюха
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 24.06.2004 (Чт) 18:35

Сообщение Кирюха » 24.06.2004 (Чт) 18:49

Люди, кто знает помогите с тойже проблемой только GetPixel ни в твипах ни в пикселях не работает когда картинке невидна, освобождаю часть картинки. Эта часть работает, закрытая -> нет.
Пишу контрол.....

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 24.06.2004 (Чт) 19:49

Отец, объясни - зачем доставать цвет картинки из под закрытого окна ??? Дело в том, что это тебе придётся с памятью работать. Потому что по идее. И это то ещё парево.

А с помощью GetPixel я думаю ты этого не добьёшся.

Может в кратце объяснишь, для чего это нужно и чего ты хочешь добиться, вот тогда получишь вразумительные ответы и предложения как более удобно решить эту задачу. :wink:

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 24.06.2004 (Чт) 20:05

Да, кстати - забыл сказать.
Тут пара нюансов есть.

Если ты берёшь пиксель со своей формы то это одно дело.
Тогда тебе надо её состояние в Autoredraw перевести и картинку сделать на ней как Picture.

А если с чужой формы, то это уже другое дело. Если у неё AutoRedraw стоит как True, то тебе надо получить её HDC и тогда ты сможешь брать цвета и с неё. А если у неё Autoredraw=False, то облом.

Кирюха
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 24.06.2004 (Чт) 18:35

Сообщение Кирюха » 25.06.2004 (Пт) 9:29

всё это я знаю, вот у меня и неполучается.
В конце концов остановился на массиве в котором буду хранить значение цвета в маске.
Вот так вот

Кирюха
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 24.06.2004 (Чт) 18:35

Сообщение Кирюха » 25.06.2004 (Пт) 9:31

короче говоря люди подскажите где можна достать исходник, если он есть.
Как делать MouseMove по только белому цвету в маске

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 25.06.2004 (Пт) 10:02

Кирюх.. Может я чего то не понимаю, но вроде это то что нужно. Или если нет, то объясни подробнее.

Копируй код в форму. Вставляй на неё рисунок и смотри на заголовок формы

Код: Выделить всё
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long
Dim PX As Long
Dim PY As Long

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
PX = X / Screen.TwipsPerPixelX
PY = Y / Screen.TwipsPerPixelY
If GetPixel(Me.hdc, PX, PY) = vbWhite Then
Me.Caption = "! White !"
Else
Me.Caption = "Another color"
End If
End Sub

Кирюха
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 24.06.2004 (Чт) 18:35

Сообщение Кирюха » 25.06.2004 (Пт) 18:33

уже можно не беспокоится, усё сделал сам.
Контрол работает как нельзя лучше...
Всё равно спасибо.... :D

Кирюха
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 24.06.2004 (Чт) 18:35

Сообщение Кирюха » 25.06.2004 (Пт) 18:34

Ещё раз лично спасибо за беспокойство ALX_2002

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 28.06.2004 (Пн) 18:00

:D Дык... Если что - обращайтесь. Всегда рады :D


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 7

    TopList