Что нового

Как получить цвет пикселя рабочего стола

kasper_sky

Antivirus
Сообщения
116
Репутация
1
Доброго времени суток, форумчане.
Возникла необходимость в следующем: нужно получить цвет определенного пикселя на рабочем столе(цвет определенного пикселя обоины(фона), что на рабстоле), причем нужный пиксель может перекрывать некоторое окно.
То есть, нужно получить цвет, не смотря на открытые и активные окна.
Надеюсь, более-менее ясно пояснил.

P.S. Да, мелкая подзадачка: можно ли преобразовать цвет полученного пикселя в черно-белый?
 

_Lexa98_

Осваивающий
Сообщения
551
Репутация
25
kasper_sky
Если просто получить цвет, то:
Код:
PixelGetColor(x,y)
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Интересная задача...
Не смотря на то что Au3Info легко определяет
Код:
>>>> Window <<<<
Title:	Program Manager
Class:	Progman
Position:	0, 0
Size:	1280, 960
Style:	0x96000000
ExStyle:	0x00000080
Handle:	0x00010080

>>>> Control <<<<
Class:	SysListView32
Instance:	1
ClassnameNN:	SysListView321
Name:	
Advanced (Class):	[CLASS:SysListView32; INSTANCE:1]
ID:	1
Text:	FolderView
Position:	0, 0
Size:	1280, 930
ControlClick Coords:	162, 354
Style:	0x56002A40
ExStyle:	0x00000000
Handle:	0x00010084

Но попытки обращения к этому хендлеру
Код:
Opt("PixelCoordMode", 0)        ;1=абсолютные, 0=относительные, 2=клиентские
$handle = WinGetHandle("Program Manager","")
$var = PixelGetColor( 652, 576, $handle)

всё равно дают цвет перекрывающего окна.
:(
 
Автор
K

kasper_sky

Antivirus
Сообщения
116
Репутация
1
_Lexa98_
А я разве спрашивал, как просто получить цвет? Странные какие-то.

C2H5OH
Во-во. Я то же самое пробовал.
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
А если отсюда зайти?
Код:
$fon = RegRead("HKEY_CURRENT_USER\Control Panel\Desktop","Wallpaper")
$stile = RegRead("HKEY_CURRENT_USER\Control Panel\Desktop","WallpaperStyle")

Зная картинку и метод размещения ("по центру", "замостить", "растянуть") уже можно попытаться что-то просчитать.
Растянуть, правда, не знаю как работает. А первые два, imho, легко просчитать, зная размер экрана и размер картинки.
Но в таком варианте иконки мы игнорируем. То есть если точка попадает на иконку, то всё равно будет взят цвет фона под ней.
 
Автор
K

kasper_sky

Antivirus
Сообщения
116
Репутация
1
C2H5OH
Возможно. А как расчитать, если стиль размещения - "по центру"? Например, обоина больше разрешения экрана.
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Центр картинки совпадает с центром экрана, остальное режется. ;)
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Ну, я не настолько хорошо знаю AutoIt.
Это тебе нужно у гуру спросить:
- как, зная путь к картинке, загрузить её в память и работать с ней - узнать размер картинки и цвет конкретного пикселя на этой картинке?

Может быть тут что-то найдешь http://autoit-script.ru/index.php/topic,47.0.html
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
Вот пример получения цвета пикселя из картинки, а вот как учесть стиль, надо подумать :scratch:

Код:
#include <GDIP.au3>

$fon = RegRead("HKEY_CURRENT_USER\Control Panel\Desktop","Wallpaper")
;$stile = RegRead("HKEY_CURRENT_USER\Control Panel\Desktop","WallpaperStyle")

_Example()

Func _Example()
    Local $hBmp, $hBitmap, $iColor
   
    ; Initialize GDI+
    _GDIPlus_Startup()
    $hBitmap =  _GDIPlus_ImageLoadFromFile($fon) ; подставляем путь до изображения
    $iColor = _GDIPlus_BitmapGetPixel($hBitmap, 250, 250) ; пиксель в координатах
   
    MsgBox(0x40, "Color", "0x" & Hex($iColor))
   
    ; Clean up
    _GDIPlus_ImageDispose($hBitmap)
    _WinAPI_DeleteObject($hBmp)
   
    ; Uninitialize GDI+
    _GDIPlus_Shutdown()
EndFunc


GDIP.au3
http://autoit-script.ru/index.php/topic,1384.msg35288.html#new
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
а вот как учесть стиль, надо подумать
Кто знает есть ли в реестре один параметр, который отвечает за фон?
У меня пока только табличка получается в HKEY_CURRENT_USER\Control Panel\Desktop

по центру замостить растянуть
TileWallpaper 0 1 0
WallpaperStyle 0 0 2
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
И ещё нужно будет получить размер загруженной картинки
Код:
$hBitmap =  _GDIPlus_ImageLoadFromFile($fon) ; подставляем путь до изображения
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
C2H5OH [?]
И ещё подскажите
Предупреждение За нарушение общих правил (пункт В.4):
Не лепите несколько вопросов разной тематики в один пост. По типу "Ребят, а ещё такой вопрос...". Каждый вопрос в свою тему.


С уважением, ваш Модератор.
 
Верх