Given that your text is very regular it shouldnt be too bad..
Consider the menu bar as a 2d array of colours
Each item of text has pixels in a uniform colour
The background may be a gradient colour hence not fixed
Set your software up to consider just a portion of the image, i.e. perform a conceptual crop
working right, then down, crop the letters out according to the following algorithm. We assume your text is white:
Set a start integer to 0 - this will be your pixel "offset"
For a column of pixels, investigate them all to find out i any are white
If at least one white pixel is found, then move to the next column
When a column is found that is completely devoid of white pixels then it means we reached the edge of the letter
"Crop" this letter out - the height should be fixed and we just found the width
Replace all non-white pixels with black
Convert the array to a single dimensional string (or something)
Use this string as a key to a hashtable in which are stored all letters possible - lookup what letter this string is
Continue until the next column of pixels that contains a white - your new starting point
For the letter O:
[FONT=Courier New]01234567[/FONT]
[FONT=Courier New]##:::##[/FONT]
[FONT=Courier New]#::#::#[/FONT]
[FONT=Courier New]#:###:#[/FONT]
[FONT=Courier New]#:###:#[/FONT]
[FONT=Courier New]#::#::#[/FONT]
[FONT=Courier New]##:::##[/FONT]
Starting at offset 0, The column has no white pixels #. Increment offset
Column 1 contains a white pixel, move on
columns 2 3 4 5 6 contain white pixels, all move on
Column 7 is full of non-white. crop width = ((7-1)-offset)
Crop out and into an array, the letter:
[FONT=Courier New][FONT=Courier New]12345[/FONT]
[FONT=Courier New][FONT=Courier New]#:::#[/FONT]
[FONT=Courier New]::#::[/FONT]
[FONT=Courier New]:###:[/FONT]
[FONT=Courier New]:###:[/FONT]
[FONT=Courier New]::#::[/FONT]
[FONT=Courier New]#:::#[/FONT]
[/FONT][/FONT]
Convert this to a string or other keyable-based-on-content object, white pix become "1", other become "0"
[FONT=Courier New][FONT=Courier New][FONT=Courier New][B]01110[/B][/FONT]
[FONT=Courier New]11011[/FONT]
[FONT=Courier New][B]10001[/B][/FONT]
[FONT=Courier New]10001[/FONT]
[FONT=Courier New][B]11011[/B][/FONT]
[FONT=Courier New]01110[/FONT]
[/FONT][/FONT]
As a single string:
"011101101110001100011101101110"
Now look this up:
[/FONT]
[FONT=Courier New]stringbuilder.Append(charactersHashTable([B]"01110[/B][FONT=Courier New]11011[/FONT][FONT=Courier New][B]10001[/B][/FONT][FONT=Courier New]10001[/FONT][FONT=Courier New][B]11011[/B][/FONT][FONT=Courier New]01110"))[/FONT][/FONT]
[FONT=Courier New]move on..[/FONT]
[FONT=Courier New]You could modify the program to be self-learning. If the [B]"01110[/B][FONT=Courier New]11011[/FONT][FONT=Courier New][B]10001[/B][/FONT][FONT=Courier New]10001[/FONT][FONT=Courier New][B]11011[/B][/FONT][FONT=Courier New]01110"[/FONT][FONT=Courier New] string is not found in the hash, show it to the user (the cropped image) and say "what is this letter/number?" - whatever they enter, stick it in the hashtable (and save it upon program exit)[/FONT][/FONT]
[FONT=Courier New]ahh... it should take maybe a day to write a software like this.. with luck! :)[/FONT]
[/FONT][/FONT][/FONT]