Witam, napotkałem drobny problem podczas tworzenia programu. Mam coś w stylu radaru, który się porusza za pomocą strzałek (lewej i prawej) po okręgu. Radar ma się poruszać cały czas w okół i kiedy będzie na odpowiednim ustawieniu ma się zatrzymać (więc po prostu przestać trzymać przycisk strzałki na klawiaturze). Musi to być zrobione na podstawie analizy obrazu.
Strzałka w zależności od radaru porusza się inną prędkością. Wygląda to mniej więcej tak z tym że tło jest zawsze takie same, a strzałka nie zostawia po sobie ,,cienia", tylko przemieszczając się o kilka pixeli dalej, kolor tła wraca do takiego samego jak na początku.
Moje rozwiązanie teoretycznie działa ale jest niedokładne lub zbyt czasochłonne, ponieważ:
Przed rozpoczęciem ruchu zapisuje sobie do tablicy kolory ze współrzędnych oczekiwanej pozycji i okolic na osi x. Następnie po rozpoczęciu ruchu program sprawdza te same miejsca dopóki nie zmieni się któryś z kolorów. (wykrycie zmiany oznacza, że strzałka tam najechała). Problem w tym, że wykrywając zmianę koloru w sąsiednich współrzędnych radar zatrzymuje się z pewną niedokładnością, a gdy pobieram do porównania tylko 1 pixel (idealną pozycję) czasami program nie nadąża z pobieraniem kolorów bo strzałka radaru kręci się dość szybko i czasami musi wykonać kilka/kilkanaście obrotów zanim się prawidłowo ustawi.
COLORREF sprawdz_kolor(int x, int y) {
HDC dc = ::GetDC(0);
COLORREF Color;
Color = ::GetPixel(dc, x, y);
::ReleaseDC(0, dc);
return Color;
}
Jak rozwiązać ten problem. Da się jakoś mniej obciążająco pobierać masowo kolory z danej części obrazu? A może jakiś inny pomysł, jak wykryć czy strzałka jest dobrze ustawiona?