Odczytywanie danych z obszaru ekranu..

0

Ktos może powiedzieć, jak zrobić program, który potrafi odczytywać np. liczbe wyswietlaną na danym obszarze ekranu..
Dla przykładu załączam obrazek, i chodziłoby mi o to, by program potrafil odczytać liczbe, ktora znajduje sie w czerwonym prostokącie.
Wiem, że mozna takie coś zrobić za pomocą odczytywania danych z pamieci programu, ktory wyświetla tą liczbe, ale zalezy mi na tym, by moj program w zaden sposob nie ingerował w program z ktorego dana ma byc odczytana.
Myślałem, zeby zrobic cos takiego, że program ten porównywał by np 2 obrazy, ten z zaznaczonego przeze mnie obszaru z obrazem, ktory jest w programie i na podstawie porownania okreslił znajdująca sie tam liczbe..

Np.
Program, z którego ma byc pobrana dana wyświetla liczbe 12
Program, który ja chce napisać, porównija obszar wyświetlania liczby 12 z moimi własnymi obrazami zaczynajac od 1,2,3..12 i kiedy dochodzi do 12 stwierdza, ze to wlasnie ta liczba jest wyswietlana na zaznaczonym przeze mnie obszarze ekranu..

wiem, ze torche to pokrecilem, ale chyba wiadomo o co chodzi.. prosze o pomoc, gdyz nie wiem jak sie za to zabrac

edit. dodam, że jeśli komus jest wygodniej, moze to byc napisane rowniez w delphi

0

są do tego gotowe biblioteki, np. http://code.google.com/p/tesseract-ocr/ słowo klucz ocr.
jeśli jednak wiesz, że dane są z jakiegoś przedziału, kolor, czcionka i rozmiar są zawsze takie same, to można by użyć twojego sposobu. oczywiście istotne tutaj jest, że na różnych komputerach dany fragment może być wyświetlany inaczej (np. przez włączenie antyaliasingu czy zmienienie dpi)
co do porównywania, załóżmy że masz wzór zapisany w tablicy W o wymiarze nm (w tablicy zapisany jest kolor) i O wymiar kl, k>n, l>m. przelatujesz po tablicy O szukając pixeli o kolorze taki samym jak w W[0][0]. gdy znajdziesz taki (np. O[x][y] = W[0][0]) to sprawdzasz czy O[x+i][y+j] == W[i][j] dla każdego i,j: 0 <= i < n, 0 <= j < m. gdy tak, to wzorzec jest w obrazie.
kolory możesz trzymać jako liczby typu int 32 bit: ((r&255)<<16 + (g&255)<<8 + (b&255)), gdzie r, g, b to liczby z przedziału 0-255

0

@dawidgarus
Dzieki, na pewno sprawdze te biblioteki i tak, dane sa z danego przedziału i zawsze mają ten sam kolor i czcionkę.

"oczywiście istotne tutaj jest, że na różnych komputerach dany fragment może być wyświetlany inaczej (np. przez włączenie antyaliasingu czy zmienienie dpi)" ten problem możemy na razie pominąć

edit. jesli dobrze rozumie, z tą tablicą masz na myśli wprowadzenie do niej calego obrazka pixel po pixelu? bo jeśli tak, to moglo by to być dosć męćżące, jesli np. musialbym napisac takowy wzór na 100 obrazków w 100 tablicach

1 użytkowników online, w tym zalogowanych: 0, gości: 1