Mam komputer z dwoma monitorami (lub laptop z dodatkowym monitorem). Monitory pracują w trybie rozszerzonego pulpitu. Chciałbym zrobić coś takiego, że na jednym monitorze jest wyświetlony całkowicie dowolny obraz (np. aplikacja, film, gra komputerowa), moja aplikacja pobiera na bieżąco ten obraz (cały ekran lub wskazany fragment, np. obszar odtwarzania filmu na stronie YouTube), przetwarza ten obraz w jakiś sposób (dorysowuje coś, zmienia kolory, rozciąga) i wyświetla go na drugim ekranie.
Wiem, że cały problem to jest zrzut ekranu, praca na bitmapie, a potem wyświetlanie obrazu i umiałbym to zrobić, ale jak to najlepiej zrobić żeby spełnić następujące warunki:
- Zrzut i wyświetlanie obrazu jest synchronizowane z wyświetlaniem obrazu na monitorach (następuje co każde odświeżenie lub co drugie lub ewentualnie co trzecie odświeżenie obrazu).
- Możliwy jest zrzut dowolnej treści (zauważyłem, że czasem nie wychodzi zrzut obrazu z odtwarzacza video).
- Bez żadnego wstępnego przygotowania wyświetlanego materiału.
Zakładam, że algorytm samego przetwarzania trwa mniej czasu niż jedno odświeżenie obrazu na monitorze (przy odświeżaniu 60Hz). Czy timery i wyświetlanie obrazu na formie (za pomocą kontrolki typu PictureBox) to dobry pomysł, czy są lepsze sposoby? W jaki sposób wykonywać automatyczny zrzut ekranu? Jak zapewnić synchronizację zrzutu i wyświetlania bitmapy z częstotliwością odświeżania monitora?
Znane mi są technologie:
- C# z Windows Forms i GTK#
- C++ z Qt
- Java z Swing
W jakiej technologii to najlepiej zrealizować? Mi to jest obojętne, w której, ale chciałbym wybrać taką, która się najlepiej nadaje do tego celu.
Ma działać w systemie Windows.
Przykłady działania:
- Na jednym monitorze jest wyświetlany film lub gra komputerowa w oknie, a na drugim monitorze jest wyświetlona kopia obrazu tej gry na pełnym ekranie (powiększony obraz wnętrza okna).
- Na jednym monitorze są wyświetlane zdjęcia lub film stereoskopowy (obrazy obok siebie), a program na drugim ekranie wyświetla ten sam obraz w formie anaglifu.
- Na drugim monitorze jest wyświetlany ten sam obraz, co na pierwszym monitorze, ale z inną jasnością, kontrastem i w negatywie (bez użycia regulatorów monitora).