Langhole Posted May 29, 2007 Share Posted May 29, 2007 Hi, I'm new to this forum, though I've been reading a lot of the posts to get used to the language. I learn quickly, and have been working on this character recognition project for about a week now. Using multiple methods found here and through much trial and error, I've come up with an app that looks at a user-defined area of pixels, in ms paint (for now), and determines (based on the background color given) how many pixels are NOT the background color. The app uses a tooltip message for debugging.Here's an example of it working:Now, that said, I can't store the coordinates of the foreground pixels right now, because something is wrong with the subscript or number of subscripts in the array. Here's my source code so far, I would appreciate any input on what could possibly be the problem.. I am still new to this syntax, and arrays seem slightly different than what I'm used to (AS2.0, c++, etc.)Anyway here's the source:expandcollapse popup#cs --------------------------------------------------------------- The Latest Version of Pixel Pirate ------------------------------------------------------------------- - Basic OCR, almost - Recognizes Pixels at x,y coords that have different colors. - No error handling yet sorry The way it works right now, you open MS Paint, and leave the document untitled. Draw something, then open up this program ( BEFORE MODIFICATION, just trust me on this one ). Try using the selection tool to just get a color value, and use the brush to see the pixel counting in action. If you are syntax savvy, have a shot at figuring out why the returning array doesn't work. ------------------------------------------------------------------ v0.4.2 by Langford ~ yes... quite a few tries already... ~ #ce -------------------------------------------------------------- ; Set Options; ;Opt( "pixelcoordmode", 2 ) Opt( "WinTitleMatchMode", 2) ; Hotkeys; HotKeySet("{PAUSE}", "_End") ; ----------------------------------------------------------- ; Includes; #include <Array.au3> #include <File.au3> ; ----------------------------------------------------------- ; Vars; $wName = "untitled - Paint" $Run = 1 $Statmessage = "Length: 0" & @CRLF & "Width: 0" & @CRLF & "Area: 0" $Countmessage = "0" $CEmessage = "0" $Coordmessage = "Waiting.." $FGCmessage = "Foreground: 0" $BGCmessage = "Background: 0" $mainMessage = "" $searchArea = ( 8 * 8 ); 64 square pixels $CurrentElement = 1 $pos = 0 WinWaitActive( $wName ) ; ----------------------------------------------------------- ; Main Loop; Do ; Array used later ;Dim $pxArray[$searchArea][2] $pos = MouseGetPos() _UpdateMessage() _GetAllPixels( ( $pos[0] - 5 ), ( $pos[1] - 5 ), ( $pos[0] + 5 ), ( $pos[1] + 5 ), 16777215) Until $Run = 0 #cs -------------------------------------------------------- Main Functions _GetAllPixels( $StartX, $StartY, $EndX, $EndY, $Color ) _UpdateMessage() _End() #ce -------------------------------------------------------- ; Pixel Function; Func _GetAllPixels( $StartX, $StartY, $EndX, $EndY, $Color ) ; Just some local vars Local $aCoord, $i, $x, $y ; Should be obvious, I am not using Coord yet though. Local $Length = $EndX - $StartX ; Length ( x ) of Search Area Local $Width = $EndY - $StartY ; Width ( y ) of Search Area Local $mCount = 0 ; Initialize this search's Foreground Pixel Count to 0 Local $Area = $Length * $Width ; Calculate the area of the search, for the Coord Array Later ; Debug Message ( there are a few more too.. more to help me find a good solution to defining characters later ) $StatMessage = "Length: " & $Length & @CRLF & "Width: " & $Width & @CRLF & "Area: " & $Area ; The Coordinate Array Dim $aReturn[$Area][2] $CurrentElement = 1 ; Current element inside the array ; Loop From Row1(y) -> Column1(x), Column2(x), Column3(x), ... , Row2(y) -> Column1(x)... etc. For $y = 1 to $Width For $x = 1 to $Length ; Actual Coordinates Local $curX = $x + $startX Local $curY = $y + $startY ; Debug Message $Coordmessage = "X: " & String( $curX ) & " Y: " & String( $curY ) #cs Parse the colors per pixel found, separate foreground from $Color Note: This script assumes you're looking at one color on one background, and only one 'character' so far. As the purpose this far is only to read a single character of a certain font at a certain position. While still being able to move around the search area. #ce Local $curColor = PixelGetColor( $curX, $curY ) $FGCmessage = "Foreground: " & $curColor $BGCmessage = "Background: " & $Color If $curColor = $Color Then ; do nothing Else ; iterate foreground pixel count $mCount = $mCount + 1 #cs If these arrays would work, I'd be able to start on character definitions.. below is my problem. Also if I ReDim the array after the loop it still doesn't work... I'm at a loss. #ce ;$aReturn[$CurrentElement][0] = $curX ;$aReturn[$CurrentElement][1] = $curY EndIf ; Debug Message $Countmessage = "Foreground Px: " & $mCount & @CRLF & $FGCmessage & @CRLF & "Background Px: " & $Area - $mCount & @CRLF & $BGCmessage $CEmessage = "Current Element: " & $CurrentElement ; Iterate Element Count $CurrentElement = $CurrentElement + 1 Next Next ; Resize Array? ( doesn't work ); ;ReDim $aReturn[ $CurrentElement ][2] ;Sleep( 1 ) ; I want it to return the whole array; ;Return $aReturn EndFunc ; ----------------------------------------------------------- ; Message Handler; Func _UpdateMessage() Local $sep = @CRLF & "------------------------------------" & @CRLF $mainMessage = $sep & $Statmessage & $sep & $Countmessage & $sep & $CEmessage & $sep & $Coordmessage $sToolTipAnswer = ToolTip( $mainMessage , ( $pos[0] + 10 ), ( $pos[1] + 10 ), "Pixel Pirate - Test: [ " & $wName & " ]" ) EndFunc ; ----------------------------------------------------------- ; Exit Handler; Func _End() Exit EndFuncThanks,~ Lang Link to comment Share on other sites More sharing options...
Langhole Posted May 29, 2007 Author Share Posted May 29, 2007 lol.. if someone wants to delete this topic that's fine... i just fixed it... LOL Link to comment Share on other sites More sharing options...
Generator Posted May 29, 2007 Share Posted May 29, 2007 Move to Example Script? 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