Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

C++ Builder 6 - Wyświetlanie JPG klatka po klatce bez migotania - jak to zrobić?

Dydelmax 05 Kwi 2015 15:44 831 6
  • #1 05 Kwi 2015 15:44
    Dydelmax
    Poziom 34  

    Witam.
    Jak w temacie. Piszę sobie programik, który ma mi wyświetlać animację złożoną z kilkuset klatek wyświetlanych w określonym odstępie czasu. Oto fragment kodu za to odpowiedzialny:

    Kod: cpp-qt
    Zaloguj się, aby zobaczyć kod

    (pliki z klatkami obrazu mają nazwy od 0001.jpg do 0250.jpg, stąd też te if-y)
    Chcę wyświetlać 25 klatek na sekundę, stąd Sleep(40). Program działa, ale pojawia się migotanie pomiędzy kolejnymi klatkami, spowodowane zapewne fragmentem Application->ProcessMessages();, jednak bez niego program wyświetla tylko pierwszą klatkę i... ostatnią, po dziesięciu sekundach. Moje pytanie brzmi: jak wyświetlać te JPG-i klatka po klatce bez migotania obrazu, z określonym odstępem czasowym?
    Pomocne wypowiedzi odpowiednio nagrodzę.
    Pozdrawiam i życzę Wesołych Świąt.

    0 6
  • #2 05 Kwi 2015 16:56
    -psiak-
    Poziom 32  

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    0
  • #3 05 Kwi 2015 18:08
    Dydelmax
    Poziom 34  

    @-psiak-, dzięki za kod, ale niestety migotanie nadal występuje. Myślę, że to przez odświeżanie formularza Application->ProcessMessages();, nie wiem jednak jak to zastąpić w taki sposób, żeby w formularzu wyświetlał się każdy kolejny załadowany JPG, a nie tylko ostatni.

    0
  • #4 05 Kwi 2015 19:46
    -psiak-
    Poziom 32  

    Jest na to tylko jeden sposób - użyć timer'a

    0
  • #5 05 Kwi 2015 20:07
    Dydelmax
    Poziom 34  

    Użyłem timera, jednak nie uzyskałem pożądanego efektu - od razu wyświetla się ostatni JPG. Kod poniżej.

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    Wychodzi na to, że to, czy użyję Sleep() czy timera nie robi w tym przypadku różnicy (chociaż podejrzewam, że w kodzie powyżej i tak jest błąd w użyciu tego timera). Problem jest w podmianie obrazków: po 0001.jpg ładowany jest 0002.jpg, po czym mija 40 milisekund (dla Sleep(40)) i ładowany jest następny obrazek. Pomiędzy tymi ładowaniami powinny zmieniać się wyświetlane obrazki, tylko jak to zrobić, żeby nie trzeba było odświeżać okna aplikacji i zapobiec migotaniu?

    0
  • #6 05 Kwi 2015 20:48
    -psiak-
    Poziom 32  

    Podejrzewam że pliki zbyt wolno się ładują.
    Zadeklaruj w klasie:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    W konstruktorze załaduj:
    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    W normalnym timerze:
    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    0