Josbe Posted April 21, 2004 Share Posted April 21, 2004 (edited) PIXEL FINDER ( Pixel Rect + GUI)----------------------------------------------------Now, I looking for a script maded by Larry about the colors(PIXEL RECT functions)I had a idea from there, and I wrote this small script adapting Graphic Interface.* In general: This show a mini-picture/preview from the screen (on mouse movement), and show color values (HEX, HTML, RGB).- You can copy some value pressing CTRL + SHIFT + number*Requirement: AutoIt-GUI v102.18 or later.(tested in v102.18)(I don't recommend to use in previous versions to v102.17)Remark: Moving through the images, tends to fail getting wrong preview(Black), still I dunno if is:- AutoIt (PixelGetColor function) or AutoIt-GUI limitation - Or some wrong code mine. But...copy and test it! (GUI is making a difference in AutoIt for do scripts)Suggestions/Comments are welcome? Sorry, I don't put any screenshot. expandcollapse popup_PixelFinder() Func _PixelFinder() $pixMouse= MouseGetPos() $curColor = PixelGetColor( $pixMouse[0], $pixMouse[1]) $xScreen= $pixMouse[0]-10 $yScreen= $pixMouse[1]-10 $rectSize= 20 $pixSize= 6 ;// FORM ---------------------------------------------- Global $titWin= "Pixel Finder" Global $YU= GUICreate($titWin, 330, 126, 150, 150) ; ===[ Arranging pixels ]=== $rect = _LoadPixelRect( $xScreen, $yScreen, $xScreen + $rectSize, $yScreen + $rectSize) $FC= Ubound($rect) $x= 0 $y= 0 Dim $Lbls[$FC][$FC] For $a=0 to $FC - 1 For $b=0 to $FC - 1 $Lbls[$a][$b]= GUISetControl("label", "", $x, $y, $pixSize, $pixSize) GUISetControlEx(-1, -1, "", "", 0x0, $rect[$a][$b]) $x= $x + $pixSize Next $y= $y + $pixSize $x= 0 Next GUIDefaultFont (8, 400, "verdana", 0) GUISetControl("group", "", 149, 3, 45, 51) ; ===[ Labels ]=== $selColor= GUISetControl("label", "", 150, 10, 42, 42) GUISetControlEx(-1, -1, "", "", 0x0, $curColor ) $infoX= GUISetControl("label", "x", 200, 10, 100, 12) $infoY= GUISetControl("label", "y", 200, 20, 100, 12) Global $infoTXT= GUISetControl("label", "Copy value (CTRL+SHIFT+#)", 135, 65, 170, 15, 0x1000) Global $infoCC= GUISetControl("label", "", 305, 65, 18, 15, 0x1000) $infoHEX= GUISetControl("label", "HEX", 135, 80, 150) $infoHTML= GUISetControl("label", "HTML", 135, 90, 150) $infoRGB= GUISetControl("label", "RGB", 135, 100, 150) ;===[ PROCESS START ]==== HotKeySet("^+1", "_CopyHEX") HotKeySet("^+2", "_CopyHTML") HotKeySet("^+3", "_CopyRGB") HotKeySet("{PAUSE}", "_FreezeW") Global $_pauseSet = 0 While GuiShow() AND GUIMSg(0) <> -3 $pixMouse= MouseGetPos() $curColor = PixelGetColor( $pixMouse[0], $pixMouse[1]) Global $col_HEX= Hex($curColor, 6) Global $col_HTML= StringRight($col_hex, 2) & StringMid($col_hex, 3, 2) & StringLeft($col_hex, 2) Global $col_RGB= _RGB($curColor) ; ===[ Updating info ]=== GUISetControlEx($selColor, -1, "", "", 0x0, $curColor ) GUIWrite($infoX, -1, "X: " & $pixMouse[0]) GUIWrite($infoY, -1, "Y: " & $pixMouse[1]) GUIWrite($infoHEX, -1, "1. HEX: " & $col_HEX) GUIWrite($infoHTML, -1, "2. HTML: #" & $col_HTML) GUIWrite($infoRGB, -1, "3. RGB: " & $col_RGB) If $_PauseSet = 0 then ;// Preview process $xScreen= $pixMouse[0]-10 $yScreen= $pixMouse[1]-10 $rect = _LoadPixelRect( $xScreen, $yScreen, $xScreen + $rectSize, $yScreen + $rectSize) $FC= Ubound($rect) $x= 0 $y= 0 For $a=0 to $FC - 1 For $b=0 to $FC - 1 GUISetControlEx($Lbls[$a][$b], -1, "", "", 0x0, $rect[$a][$b]) $x= $x + $pixSize Next $y= $y + $pixSize $x= 0 Next EndIf Wend EndFunc Func _CopyHEX() ClipPut($col_HEX) GUIWrite($infoTXT, -1, "HEX value copied: " & $col_HEX) GUISetControlEx($infoCC, -1, "", "", 0x0, DEC($col_HEX)) EndFunc Func _CopyHTML() ClipPut($col_HTML) GUIWrite($infoTXT, -1, "HTML value copied: " & $col_HTML) GUISetControlEx($infoCC, -1, "", "", 0x0, DEC($col_HEX)) EndFunc Func _CopyRGB() ClipPut($col_RGB) GUIWrite($infoTXT, -1, "RGB copied: " & $col_RGB) GUISetControlEx($infoCC, -1, "", "", 0x0, DEC($col_HEX)) EndFunc Func _FreezeW() If $_PauseSet = 0 then Global $_PauseSet = 1 WinSetTitle($titWin, "", $titWin & " (freeze) ") else Global $_PauseSet = 0 WinSetTitle($titWin, "", $titWin) EndIf EndFunc ; _LoadPixelRect: maded by Lar. (thanks) Func _LoadPixelRect($_NL, $_NT, $_NR, $_NB) If ($_NL > $_NR Or $_NT > $_NB) Then SetError(1) Return 0 EndIf Dim $_APIXRECT[$_NB-$_NT+1][$_NR-$_NL+1] For $_NY = $_NT To $_NB For $_NX = $_NL To $_NR $_APIXRECT[$_NY-$_NT][$_NX-$_NL] = PixelGetColor($_NX,$_NY) Next Next Return $_APIXRECT EndFunc Func _RGB($_DColor) Local $R= BitAnd( BitShift( $_DColor, 16 ), 0xff ) Local $G= BitAnd( BitShift( $_DColor, 8 ), 0xff ) Local $B= BitAnd( $_DColor, 0xff ) Return "(" & $B & ", " & $G & ", " & $R & ")" EndFuncEDIT1: - Updated a Freeze function for freeze the preview. (pressing "PAUSE") Edited April 21, 2004 by josbe AUTOIT > AutoIt docs / Beta folder - AutoIt latest beta Link to comment Share on other sites More sharing options...
Guest rathore Posted April 21, 2004 Share Posted April 21, 2004 works great! ... nice script.though i too had this problemMoving through the images, tends to fail getting wrong preview(Black) Link to comment Share on other sites More sharing options...
Josbe Posted April 21, 2004 Author Share Posted April 21, 2004 works great! ... nice script. though i too had this problemYes, I have noticed that the mistake comes from an bad output from: PixelGetColor() (After several calls or certain colors) Like in the example: $curColor = PixelGetColor ($pixMouse [0], $pixMouse [1]) I still don't know if is a function bug. AUTOIT > AutoIt docs / Beta folder - AutoIt latest beta Link to comment Share on other sites More sharing options...
jpm Posted April 21, 2004 Share Posted April 21, 2004 Impressive. I will remove the .17 version as suggested. I play with 102.18C and after a while it stay black is that the pixelgetcolor problem Link to comment Share on other sites More sharing options...
Josbe Posted April 21, 2004 Author Share Posted April 21, 2004 PIXELFINDER- Updated (code) a Freeze function for freeze the preview pic. (pressing "PAUSE") (Useful for analize a section of pixels) AUTOIT > AutoIt docs / Beta folder - AutoIt latest beta Link to comment Share on other sites More sharing options...
CyberFunk Productions Posted April 21, 2004 Share Posted April 21, 2004 very nice, good job!!!!!!!!!!1 Link to comment Share on other sites More sharing options...
CyberSlug Posted April 22, 2004 Share Posted April 22, 2004 (edited) Excellent!!!! That looks *really* good, josbe!For a long time, I used a pixel finder called Pixie, but I never found an easy way to copy the RGB color to the clipboard. Three minor suggestions:- the hex value should show the 0x prefix.- add ability to copy all color formats to clipboard; maybe use Ctrl+Shift+zero- add ability to keep window always on top. WinSetOnTop(...) is probably the easiest way to do this.P.S.: You could also include other color models: HSV, HSL, CMY, CMYK are some of the others I've read about. But I do not want you to clutter your nice clean dialog! Edited April 22, 2004 by CyberSlug Use Mozilla | Take a look at My Disorganized AutoIt stuff | Very very old: AutoBuilder 11 Jan 2005 prototype I need to update my sig! Link to comment Share on other sites More sharing options...
jpm Posted April 22, 2004 Share Posted April 22, 2004 AS I say in other thread I know how to fixe the black freeze due to gdi leaks Link to comment Share on other sites More sharing options...
CyberSlug Posted April 22, 2004 Share Posted April 22, 2004 Here's an idea to reduce CPU load:Replace the line $pixMouse= MouseGetPos() with this:; only update when mouse cursor has changed $previous = MouseGetPos() sleep(250);you might want a smaller value here $pixMouse = MouseGetPos() If $previous[0] = $pixMouse[0] And $previous[1] = $pixMouse[1] Then ContinueLoop(I have a laptop with a loud fan that kicks in at 100% CPU usage) Use Mozilla | Take a look at My Disorganized AutoIt stuff | Very very old: AutoBuilder 11 Jan 2005 prototype I need to update my sig! Link to comment Share on other sites More sharing options...
Josbe Posted April 23, 2004 Author Share Posted April 23, 2004 (edited) Three minor suggestions:- the hex value should show the 0x prefix.- add ability to copy all color formats to clipboard; maybe use Ctrl+Shift+zero- add ability to keep window always on top. WinSetOnTop(...) is probably the easiest way to do this.P.S.: You could also include other color models: HSV, HSL, CMY, CMYK are some of the others I've read about. But I do not want you to clutter your nice clean dialog!@CyberSlug: I will keep in mind your ideas. Thxs.About of another colors models, when I was writing RGB function, I thought about this, but I left it to see if it was suggested for include it. I will include it. EDT:- add ability to copy all color formats to clipboard; maybe use Ctrl+Shift+zero..you say: all in one line? Edited April 23, 2004 by josbe AUTOIT > AutoIt docs / Beta folder - AutoIt latest beta Link to comment Share on other sites More sharing options...
CyberSlug Posted May 13, 2004 Share Posted May 13, 2004 I was just wondering if you had any updates.I came across this page which mentions a similar program, EyeDropper, but Pixelfinder is much easier to use Use Mozilla | Take a look at My Disorganized AutoIt stuff | Very very old: AutoBuilder 11 Jan 2005 prototype I need to update my sig! Link to comment Share on other sites More sharing options...
SlimShady Posted May 13, 2004 Share Posted May 13, 2004 I use it regularly. It's a nice program. Link to comment Share on other sites More sharing options...
emmanuel Posted May 13, 2004 Share Posted May 13, 2004 so, would anyone want to compile that and make it available somewhere? I don't plan to go to the unstable AutoIt... you know, just if it's something you wanted to do... "I'm not even supposed to be here today!" -Dante (Hicks) Link to comment Share on other sites More sharing options...
Josbe Posted May 13, 2004 Author Share Posted May 13, 2004 @CyberSlug: Updates? Yeah. Recently I worked in some details and improvements.Soon I will upload the new PixelFinder. Only I hope send it the Helpfile to Jon.(at last) My work break my time for some AutoIt projects... @emmanuel: The actual version works fine in the actual Unstable. But, don't panic to Unstable.. ...You only need the Aut2Exe and AutoitSC.bin files for compile. Easy! In the next upload I will include a compiled file.@CyberSlug(or someone): Do you know any algorithm for RGB 2 HSL?I found one, but HUE value return a wrong value when I translate to AutoIt. AUTOIT > AutoIt docs / Beta folder - AutoIt latest beta Link to comment Share on other sites More sharing options...
CyberSlug Posted May 13, 2004 Share Posted May 13, 2004 @CyberSlug(or someone): Do you know any algorithm for RGB 2 HSL? I found one, but HUE value return a wrong value when I translate to AutoIt. josbe, [ulr=http://130.113.54.154/~monger/hsl-rgb.html]look at step #4 at this site: "If the max and min colors are the same (ie the color is some kind of grey), S is defined to be 0, and H is undefined but in programs usually written as 0" I played with Windows' built-in color picker (mspaint.exe > colors menu > edit colors > define custom colors) and found this: RGB = (76,76,76) shows up as HSL = (160,0,72) However, changing the Hue makes no difference! I do not know what algorithm Microsoft uses... Use Mozilla | Take a look at My Disorganized AutoIt stuff | Very very old: AutoBuilder 11 Jan 2005 prototype I need to update my sig! Link to comment Share on other sites More sharing options...
CyberSlug Posted May 13, 2004 Share Posted May 13, 2004 (edited) I think the following will simulate Microsoft's algorithm: Select Case $r = $g And $g = $b ;all colors equal $Hue = 160 Case $r = $g ;red==green, ANY blue value $Hue = 40 Case $r = $b And $g > $b;red=blue, green largest $Hue = 80 Case $r = $b And $g < $b;red=blue, green smallest $Hue = 200 Case $g = $b And $r > $g;green=blue, red largest $Hue = 0 Case $g = $b And $r < $g;green=blue, red smallest $Hue = 120 Case Else ; use result from algorithm at the website.... EndSelect Edited May 13, 2004 by CyberSlug Use Mozilla | Take a look at My Disorganized AutoIt stuff | Very very old: AutoBuilder 11 Jan 2005 prototype I need to update my sig! Link to comment Share on other sites More sharing options...
Josbe Posted May 14, 2004 Author Share Posted May 14, 2004 Interesting, CyberS. Thxs I'll try it! Actually, I was using this (from another site): var_R = ( R / 255 ) //RGB values = From 0 to 255 var_G = ( G / 255 ) var_B = ( B / 255 ) var_Min = min( var_R, var_G, var_B ) //Min. value of RGB var_Max = max( var_R, var_G, var_B ) //Max. value of RGB del_Max = var_Max - var_Min //Delta RGB value L = ( var_Max + var_Min ) / 2 if ( del_Max == 0 ) //This is a gray, no chroma... { H = 0 //HSL results = From 0 to 1 S = 0 } else //Chromatic data... { if ( L < 0.5 ) S = del_Max / ( var_Max + var_Min ) else S = del_Max / ( 2 - var_Max - var_Min ) del_R = ( ( ( var_Max - var_R ) / 6 ) + ( del_Max / 2 ) ) / del_Max del_G = ( ( ( var_Max - var_G ) / 6 ) + ( del_Max / 2 ) ) / del_Max del_B = ( ( ( var_Max - var_B ) / 6 ) + ( del_Max / 2 ) ) / del_Max if ( var_R == var_Max ) H = del_B - del_G else if ( var_G == var_Max ) H = ( 1 / 3 ) + del_R - del_B else if ( var_B == var_Max ) H = ( 2 / 3 ) + del_G - del_R if ( H < 0 ); H += 1 if ( H > 1 ); H -= 1 } AUTOIT > AutoIt docs / Beta folder - AutoIt latest beta Link to comment Share on other sites More sharing options...
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