Sign in to follow this  
Followers 0
Ruben

Help detecting a range of colors with PixelGetColor

5 posts in this topic

#1 ·  Posted (edited)

Hello autoit community, i want to make a script but i don't know how to do it:

Im making a script that uses PixelGetColor to activate a function when some colour shows up in a certain pixel.

That's easy, but the problem now is that i don't want it to work with a single color like 0xff0000 alone but with a range shades of that same color too (0xfe0000, 0xff0001, etc), kinda like pixel search's shade variation

Is there any way to do this?

thanks

Edited by Ruben

Share this post


Link to post
Share on other sites



Welcome to AutoIt and the forum!

Can you please tell us which application you try to automate? Maybe there is an easier way to do what you want.


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2017-04-18 - Version 1.4.8.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (NEW 2017-02-27 - Version 1.3.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
PowerPoint (2015-06-06 - Version 0.0.5.0) - Download - General Help & Support

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites

#3 ·  Posted (edited)

Probably fill an array with the colors it should check.

Func pixelmatchescolorsI($x,$y,$carray)
local $color=PixelGetColor(x,y)
for $i=1 to $carray[0]
if $color = $carray[i] then
return true
endif
next
return false
EndFunc

my autoit syntax is probably totally off, but this code should pretty much do it. carray contains an array with colors to check. In a range it could be something like Func pixelmatchescolor($x,$y,$colortomatch,$variation)

calculate the range and check if the color lies within that range, that would be faster than an array loop. Another simple solution to do a pixelsearch for one pixel with the shade variation you need and check if it returns an array.

Edited by cageman

Share this post


Link to post
Share on other sites

PixelSearch will allow you to input a shade variation value. Use that instead of PixelGetColor.


If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Share this post


Link to post
Share on other sites

#5 ·  Posted (edited)

I came with this code, it works like PixelGetColor and has PixelSearch's shades just like i asked.

It's a PixelGetColor with shades option and it finally works :D

I forgot about @error when i asked for help, now im using a error on purpose lol

Thanks anyway guys

HotKeySet('{END}','_exit')


While 1

$pos = MouseGetPos()
$color = 0xff0000
$shades = 128
$coord = PixelSearch($pos[0], $pos[1],$pos[0], $pos[1], $color, $shades, 1)


If Not @error Then

If $coord[0]=$pos[0] and $coord[1]=$pos[1] Then
TrayTip ( "", "that's it", 1 ,5 )
Sleep(100)
EndIf

EndIf

If @error Then
TrayTip ( "", "nothing there", 1 ,5 )
Sleep(100)
EndIf

Sleep(100)

WEnd


Func _exit()
Exit
EndFunc
Edited by Ruben

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0