Что нового

Более быстрая фукция PixelGetColor

Destop

Новичок
Сообщения
5
Репутация
2
Собственно, говоря, САБЖ.
Необходимо перевести часть экрана в массив. Через PixelGetColor получается ну очень долго.
Подозреваю, что можно скопировать экран в кэш через PrintScreen и вытянуть цвета от туда.
Помогите, плз!
 
Автор
D

Destop

Новичок
Сообщения
5
Репутация
2
Нашел более быструю функцию (надеюсь) в Винапи, но прога не работает. Пишет: неизвестное название функции. Что не так?
Помогите, плз!

#Include <WinAPI.au3>

Global $hDC
Global $iX
Global $iY

$iX=100
$iY=100
For $x=1 to 800
For $y=1 to 800
_WinAPI_GetPixel ( $hDC, $iX, $iY )
Next
Next

MsgBox (4096, "Box", "End")
 

sforce5

Олл фо ЛулзЪ
Сообщения
160
Репутация
41
Destop сказал(а):
Нашел более быструю функцию (надеюсь) в Винапи, но прога не работает. Пишет: неизвестное название функции. Что не так?
Помогите, плз!

#Include <WinAPI.au3>

Global $hDC
Global $iX
Global $iY

$iX=100
$iY=100
For $x=1 to 800
For $y=1 to 800
_WinAPI_GetPixel ( $hDC, $iX, $iY )
Next
Next

MsgBox (4096, "Box", "End")

Потому что в WinAPI.au3 нет функции _WinAPI_GetPixel, эта функция есть в WinAPIEx.au3
 
Автор
D

Destop

Новичок
Сообщения
5
Репутация
2
Спасибо.
С #Include <WinAPIEx.au3> Не получалось. Выскакивали двойые фукции. Я их оттуда удалил и все прошло. Скорость выше, чем в Pixelgetcolor раз в 20, но этого по прежнему не достаточно.
 
Автор
D

Destop

Новичок
Сообщения
5
Репутация
2
Нашел фукцию ScreenCapture, о не могу понять, как она работает.
Написал код:
Код:
#Include <ScreenCapture.au3>
Global $sFileName="", $hWnd, $iLeft, $iTop, $iRight = 1400, $iBottom = 1000, $fCursor = True

$Col=_ScreenCapture_CaptureWnd($sFileName, $hWnd, $iLeft, $iTop, $iRight, $iBottom, $fCursor)

Предполагаю, что весь массив находится в $Col (или в $hWnd), но как его от туда вытащить? Например, как узнать цвет точки с координатами 100,100?
 

arfey

Новичок
Сообщения
25
Репутация
2
Ну так возми и узнай цвет с нужного тебе пикселя.
К чему массив то?
 

SyDr

Сидра
Сообщения
651
Репутация
158
Функция _ScreenCapture_CaptureWnd создаёт скриншот определённого окна (по его $hWnd) и сохраняет полученное изображение в указанный файл.
Функция не возвращает никаких значений.
 
Автор
D

Destop

Новичок
Сообщения
5
Репутация
2
arfey сказал(а):
Ну так возми и узнай цвет с нужного тебе пикселя.
К чему массив то?

Нужен быстрый способ (за 1 секунду) перевода экрана в массив. В стандартном Бейсике есть функция Get. Эта функция работает очень быстро. В Autoit все, что нашел, _WinAPI_GetPixel, но на экран уходит около 20 секуд. Конечно, можно использовать ScreenCapture, сохранив экран в файл, а затем считав данные из файла. Думаю, можно будет уложиться в секунду. Но это все равно, что чесать левое ухо правой рукой. Неужели в Автоит нету элементарной функции копирования экрана в память? Неужели, мне придется использовать qbasic 20-и летней давности? Кстати, в Autohotkey тоже не нашел.
 
Верх