• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C++ Szybkie sprawdzanie kolorów pixeli

Object Storage Arubacloud
0 głosów
358 wizyt
pytanie zadane 2 października 2020 w C i C++ przez Bartek2210 Obywatel (1,310 p.)

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?

komentarz 2 października 2020 przez NewEraOfPeace Gaduła (4,790 p.)
Szczerze, to prawie nic nie zrozumiałem.
komentarz 2 października 2020 przez Bartek2210 Obywatel (1,310 p.)
W uproszczeniu strzałka kręci się tak jak na obrazku w kółko. Chce żeby program ,,wiedział" kiedy znajdzie się na danych współrzędnych i wtedy przestał nią obracać na podstawie analizy obrazu. Ważne żeby przy tym był jak najmniejszy błąd.
komentarz 2 października 2020 przez tangarr Mędrzec (154,780 p.)

@Bartek2210,
1. Dlaczego chcesz/musisz wykrywać "kolizję" na podstawie analizy obrazu?
2. Podejrzewam, że uzyskałbyś przyspieszenie gdybyś wywalił wywołania GetDC i ReleaseDC poza funkcję sprawdz_kolor

komentarz 2 października 2020 przez Bartek2210 Obywatel (1,310 p.)
radar jest w grze komputerowej a jego odczytywanie ma być niewykrywalne bo nie chcę aby zostało to uznane za cheat (mimo że program nie będzie robił nic złego), a nie wiem czy jest inny sposób który będzie bezpieczny.
komentarz 3 października 2020 przez NewEraOfPeace Gaduła (4,790 p.)
No więc stawiam, że w Pythonie zrobisz to 10x szybciej, to jedno. Drugie - użyłbym jednak jakiejś libki, bo walcząć z WinApi możesz się gdzieś po drodze przewrócić i obić

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
2 odpowiedzi 504 wizyt
pytanie zadane 5 stycznia 2017 w C i C++ przez Marchewka900 Bywalec (2,970 p.)
0 głosów
0 odpowiedzi 162 wizyt
pytanie zadane 31 października 2021 w HTML i CSS przez TOWaD Mądrala (5,700 p.)
+1 głos
2 odpowiedzi 333 wizyt
pytanie zadane 8 kwietnia 2021 w JavaScript przez Nearr Obywatel (1,890 p.)

92,555 zapytań

141,404 odpowiedzi

319,557 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...