#include <APIConstants.au3>
#include <Array.au3>
#include <GDIPlus.au3>
#include <WinAPIEx.au3>
HotKeySet('{Pause}', '_Mo') ; запуск рисования по Pause
HotKeySet('{ESC}', '_Exit') ; выход из скрипта по ESC
$C = 1
_GDIPlus_Startup()
$hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & '\1.bmp') ; загрузка изображения
$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
$W = _GDIPlus_ImageGetWidth($hImage) ; получение высоты изображения
$H = _GDIPlus_ImageGetHeight($hImage) ; получение ширины изображения
_GDIPlus_ImageDispose($hImage)
_GDIPlus_Shutdown()
Dim $Matrix[$H / $C][$W / $C] ; 2-мерный массив, в котором будет храниться картинка
Dim $HLS[3]
$hSrcDC = _WinAPI_CreateCompatibleDC(0)
$hSrcSv = _WinAPI_SelectObject($hSrcDC, $hBitmap)
$hDstDC = _WinAPI_CreateCompatibleDC(0)
$hDib = _WinAPI_CreateDIB(1, 1)
$hDstSv = _WinAPI_SelectObject($hDstDC, $hDib)
_WinAPI_SetStretchBltMode($hDstDC, $HALFTONE)
For $y = 0 To $H / $C - 1
For $x = 0 To $W / $C - 1
_WinAPI_StretchBlt($hDstDC, 0, 0, 1, 1, $hSrcDC, $x * $C, $y * $C, $C, $C, $SRCCOPY)
$RGB = _WinAPI_GetPixel($hDstDC, 0, 0)
_WinAPI_ColorRGBToHLS($RGB, $HLS[0], $HLS[1], $HLS[2])
$Matrix[$y][$x] = $HLS[1]
Next
Next
_WinAPI_SelectObject($hSrcDC, $hSrcSv)
_WinAPI_DeleteObject($hBitmap)
_WinAPI_DeleteDC($hSrcDC)
_WinAPI_SelectObject($hDstDC, $hDstSv)
_WinAPI_DeleteObject($hDib)
_WinAPI_DeleteDC($hDstDC)
;_ArrayDisplay($Matrix, 'Luminance')
While 1
Sleep(50) ; цикл
WEnd
Func _Mo() ; простая функция рисования
Sleep(2000)
$pos = MouseGetPos()
For $y = 0 To $H / $C - 1
For $x = 0 To $W / $C - 1
If $Matrix[$y][$x] = 0 Then
MouseMove($pos[0] + $x, $y - 1 + $pos[1], 1)
MouseClick('left')
EndIf
Next
Next
EndFunc ;==>_Mo
;~ Func _Mo() ; функция рисования со случайными линиями
;~ Sleep(2000)
;~ $aRandom = _RandomEx(1, $H / $C, $H / $C, 1, 1)
;~ $pos = MouseGetPos()
;~ For $y = 0 To $H / $C - 1
;~ For $x = 0 To $W / $C - 1
;~ If $Matrix[$aRandom[$y] - 1][$x] = 0 Then
;~ MouseMove($pos[0] + $x, $aRandom[$y] - 1 + $pos[1], 1)
;~ MouseClick('left')
;~ EndIf
;~ Next
;~ Next
;~ EndFunc ;==>_Mo
Func _Exit()
Exit
EndFunc ;==>_Exit
; #FUNCTION# ==============================================================================================================
; Name...........: _RandomEx
; Description ...: Function generates a random numbers and displays them in a specified format.
; Syntax.........: _RandomEx($_iSNum, $_iENum, $_iRNumCount, $_iRetFormat, $_sRetDelimiter, $_iUnique)
; Parameters ....: $_iSNum - The smallest number to be generated. The default is 0.
; $_iENum - The largest number to be generated. The default is 1.
; $_iRNumCount - Quantity of random numbers
; $_iRetFormat - Return format (0 = String (Default), 1 = Array)
; $_sRetDelimiter - Random numbers delimeter if return format is string. The default is ","
; $_iUnique - Specified if generated random numbers should be unique (0 = not unique, 1 = unique (Default))
; Return values .: Success - Return random numbers between $_iSNum and $_iENum in specified format.
; Failure - 0, sets @error Returns 0 and sets @error flag to 1 if bad parameters
; |1 - $_iSNum equally or greater $_iENum
; |2 - Quantity of possible unique random numbers is less requested
; Author ........: XpycT, idea of return in string format madmasles http://autoit-script.ru/index.php/topic,6344.msg44489.html#msg44489
; =========================================================================================================================
Func _RandomEx($_iSNum = 0, $_iENum = 1, $_iRNumCount = 1, $_iUnique = 1, $_iRetFormat = 0, $_sRetDelimiter = ",")
Local $sRNumStr = "`", $iNumCount = 0
If $_iSNum >= $_iENum Then Return SetError(1, 0, 0)
If $_iUnique And($_iENum - $_iSNum + 1) < $_iRNumCount Then Return SetError(2, 0, 0)
While $iNumCount <> $_iRNumCount
$iRNum = Random($_iSNum, $_iENum, 1)
If $_iUnique = 1 Then
If Not StringInStr($sRNumStr, "`" & $iRNum & "`") Then
$sRNumStr &= $iRNum & "`"
$iNumCount += 1
EndIf
Else
$sRNumStr &= $iRNum & "`"
$iNumCount += 1
EndIf
WEnd
$sRNumStr = StringTrimLeft(StringTrimRight($sRNumStr, 1), 1)
If $_iRetFormat = 0 Then Return StringReplace($sRNumStr, "`", $_sRetDelimiter)
If $_iRetFormat = 1 Then Return StringSplit($sRNumStr, "`")
EndFunc ;==>_RandomEx