chacoya121 Posted May 27, 2017 Posted May 27, 2017 (edited) Local $count = 1 Local $x1= 100,$y1 = 100,$x2 = 110,$y2 = 110 $area = ($x2+$x1)*($y2+$y1) Local $array[$area][2] For $i = $x1 to $x2 Step 1 For $j = $y1 to $y2 Step 1 $color = PixelGetColor($i,$j) $scolor = Hex($color,6) $array[$count][2] = [$scolor,1] $position = _ArraySearch($array,$scolor,0,0,0,0,1) If $array[$position][0] = $scolor Then $array[$position][1] +=1 Else $count += 1 EndIf Next Next _ArrayDisplay($array) plz help adjust and shrink it down soo confusing playing with array Edited May 27, 2017 by chacoya121
FengHuangWuShen Posted May 27, 2017 Posted May 27, 2017 Where is all of your code? This is confusing init of itself... what are you trying to do exactly?
FengHuangWuShen Posted May 27, 2017 Posted May 27, 2017 (edited) #include <Array.au3> Global $color Global $x1 = 100, $y1 = 100, $x2 = 110, $y2 = 110 $color = PixelGetColor($x1, $y1) ConsoleWrite(Hex($color, 6) & @CRLF) Edited May 27, 2017 by FengHuangWuShen
Malkey Posted May 27, 2017 Posted May 27, 2017 Here is one of many possible array formats. #include <Array.au3> Local $x1 = 120, $y1 = 100, $x2 = 130, $y2 = 110 Local $array[($x2 - $x1 + 1)][($y2 - $y1 + 1)] For $i = 0 To ($x2 - $x1) For $j = 0 To $y2 - $y1 $array[$j][$i] = $i + $x1 & "," & $j + $y1 & "=" & "0x" & Hex(PixelGetColor($i + $x1, $j + $y1), 6) Next Next _ArrayDisplay($array, "Coordinates(X,Y)=PixelColor")
chacoya121 Posted May 30, 2017 Author Posted May 30, 2017 (edited) can you add up all the duplicate color and test with some different coordinate it wont work Local $x1 = 77, $y1 = 214, $x2 = 118, $y2 = 254 is there limit to array it could stored? Edited May 30, 2017 by chacoya121
Malkey Posted May 30, 2017 Posted May 30, 2017 From here you will find:- 16,777,216 - Maximum number of elements for an array. Although, the _ArrayDisplay() function does not display that many elements. And, another example. #include <Array.au3> $a = _ArrayColors(120, 100, 130, 110) ; Default ($iRet = 2) returns both arrays, _ArrayDisplay($a[0]) ; 2D Array of colors at their coordinates. _ArrayDisplay($a[1]) ; 2D array of colors and the number of occurrences of that color. $b = _ArrayColors(77, 214, 118, 254, 0) ; $iRet = 0 Returns array of colors at their coordinates only. _ArrayDisplay($b) Func _ArrayColors($x1, $y1, $x2, $y2, $iRet = 2) Local $array[($y2 - $y1 + 1)][($x2 - $x1 + 1)] Local $aUniqueArray[0][2], $iIndex For $i = 0 To ($x2 - $x1) For $j = 0 To $y2 - $y1 If $iRet <> 1 Then $array[$j][$i] = $i + $x1 & "," & $j + $y1 & "=" & "0x" & Hex(PixelGetColor($i + $x1, $j + $y1), 6) $iIndex = _ArraySearch($aUniqueArray, "0x" & Hex(PixelGetColor($i + $x1, $j + $y1), 6)) If $iRet Then If $iIndex = -1 Then _ArrayAdd($aUniqueArray, "0x" & Hex(PixelGetColor($i + $x1, $j + $y1), 6) & "|" & 1) Else $aUniqueArray[$iIndex][1] += 1 EndIf EndIf Next Next Switch $iRet Case 0 Return $array Case 1 Return $aUniqueArray Case 2 Local $r[] = [$array, $aUniqueArray] Return $r EndSwitch EndFunc ;==>_ArrayColors
chacoya121 Posted May 31, 2017 Author Posted May 31, 2017 (edited) Global $x1 = 82 Global $y1 = 217 Global $x2 = 115 Global $y2 = 255 Func _Start() For $i = $x1 To $x2 Step 1 For $j = $y1 To $y2 Step 1 $color = PixelGetColor($i, $j) $getini = IniReadSection("Color Code.ini", "Color") If Not @error Then IniWrite("Color Code.ini", "Color",Hex($color, 6), $getini[1][1]+1) ElseIf @error Then IniWrite("Color Code.ini", "Color",Hex($color, 6), "1") EndIf Next Next EndFunc ;==>Start thank you , you are the best ,i understand it now can you put that into ini file i try similar way but some how doesn't work sorry for my english and low lvl programming Quote Quote Edited May 31, 2017 by chacoya121
Malkey Posted May 31, 2017 Posted May 31, 2017 A few points for your consideration:- - You have to call a function for it to actually run, like using "_Start()". The next two are not wrong, just not conventionally used:- - When using For - Next loops, "Step 1" is the default, so if "Step 1" is absent, "Step 1" is assumed. - This "ElseIf @error Then" can be replaced with just "Else", because, when starting the If statement with "If Not @error Then" one should realize any following "Else" will be logically mutually exclusive. Meaning there can be only two possible conditions either an error, or, not an error. Often, the "Else" is used to cover all conditions that are not covered by the preceding "If" or "ElseIf's". This related note of interest comes to mind. In AutoIt: False is equal to zero, (0). True is everything else that is not equal to zero, (0) - numerically speaking. (Ref: Booleans) Global $x1 = 82 Global $y1 = 217 Global $x2 = 115 Global $y2 = 255 _Start() ShellExecute("Color Code.ini") ; View Color Code.ini file. Func _Start() If FileExists("Color Code.ini") Then FileDelete("Color Code.ini") ; Prevent adding extra color occurrences to existing ini file For $i = $x1 To $x2 For $j = $y1 To $y2 $color = PixelGetColor($i, $j) $getini = IniReadSection("Color Code.ini", "Color") If Not @error Then IniWrite("Color Code.ini", "Color", Hex($color, 6), $getini[1][1] + 1) Else IniWrite("Color Code.ini", "Color", Hex($color, 6), "1") EndIf Next Next EndFunc ;==>_Start
chacoya121 Posted May 31, 2017 Author Posted May 31, 2017 (edited) Global $x1 = 82 Global $y1 = 217 Global $x2 = 115 Global $y2 = 255 _Start() ShellExecute("Color Code.ini") ; View Color Code.ini file. Func _Start() If FileExists("Color Code.ini") Then FileDelete("Color Code.ini") For $i = $x1 To $x2 Step 1 For $j = $y1 To $y2 Step 1 $color = PixelGetColor($i, $j) $getini = IniReadSection("Color Code.ini", "Color") If @error Then IniWrite("Color Code.ini", "Color", "0x" & Hex($color, 6),"") If Not @error Then IniWrite ("Color Code.ini", "Color", "0x" & Hex($color, 6), "") For $k = 0 To $getini[0][0] Step 1 If $getini[$k][0] = Hex($color,6) Then $getini[1][1] += 1 EndIf Next Next Next EndFunc ;==>Start plz help me add duplicate color Edited June 2, 2017 by chacoya121
Malkey Posted June 6, 2017 Posted June 6, 2017 On 6/1/2017 at 2:53 AM, chacoya121 said: .... plz help me add duplicate color My script of post #9, writes the color to "Color Code.ini" file. Look at that file and you should see the color in hexi-decimal without the prefix "0x" and the color equals the number of times that pixel color appears in the search rectangle. Example of "Color Code.ini" file. [Color] C0C0C0=1242 C0C0A0=978 C0C085=978 854600=889 C0A067=978 C08546=968 672300=882 672346=986 460000=924 464685=1001 2367A0=990 462367=898 466767=898 .... Etc
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now