Что нового

Для чего выз-ся следующие WinAPI функции (список внутри) при работе с цветами?

SurikenTSD

Новичок
Сообщения
67
Репутация
1
Код:
Local $hDC = _WinAPI_GetDC($hWnd)
Local $hMemDC = _WinAPI_CreateCompatibleDC($hDC)
Local $hBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $Size[0], $Size[1])
Local $hSv = _WinAPI_SelectObject($hMemDC, $hBitmap)
_WinAPI_BitBlt($hMemDC, 0, 0, $Size[0], $Size[1], $hDC, 0, 0, $SRCCOPY)
_WinAPI_SelectObject($hMemDC, $hSv)
_WinAPI_DeleteDC($hMemDC)
_WinAPI_ReleaseDC($hWnd, $hDC)


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

Функции выдраны из скрипта:

Код:
Func _GetField(ByRef $aiField) ; получение массива цветов поля
; получение BitMap-снимка экрана с помощью WinAPI
Local $hWnd = WinGetHandle("Игры Google+ - Google Chrome")
Local $Size = WinGetClientSize($hWnd)
Local $hDC = _WinAPI_GetDC($hWnd)
Local $hMemDC = _WinAPI_CreateCompatibleDC($hDC)
Local $hBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $Size[0], $Size[1])
Local $hSv = _WinAPI_SelectObject($hMemDC, $hBitmap)
_WinAPI_BitBlt($hMemDC, 0, 0, $Size[0], $Size[1], $hDC, 0, 0, $SRCCOPY)
_WinAPI_SelectObject($hMemDC, $hSv)
_WinAPI_DeleteDC($hMemDC)
_WinAPI_ReleaseDC($hWnd, $hDC)
Local $L = $Size[0] * $Size[1]
Local $tBits = DllStructCreate('dword[' & $L & ']')
_WinAPI_GetBitmapBits($hBitmap, 4 * $L, DllStructGetPtr($tBits))
; определение цветов клеток
For $iCol = 0 To $iNumCols - 1
For $iRow = $iNumRows - 1 to 0 Step -1
; замер цвета квадратика
$iX = $iCornerX + ($iCol * 40) + $iDeltaX
$iY = $iCornerY + ($iRow * 40) + $iDeltaY
$iPixelColor = Mod(DllStructGetData($tBits, 1, $iY * $Size[0] + $iX), 0x1000000)
$aiField[$iRow][$iCol] = _GetCheckColor($iPixelColor)
Next
Next
; удаление данных для избежаня утечки памяти
_WinAPI_DeleteObject($hBitmap)
_WinAPI_DeleteObject($hMemDC)
_WinAPI_DeleteObject($tBits)
EndFunc
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Для того, чтобы разобраться в этом, нужно для начала понять общие принципы рисования в GDI. Вы должны усвоить что такое DC, Bitmap и растровые операции. Начните с этого.
 
Верх