Gif zapętlający się w picturebox'ie

Odpowiedz Nowy wątek
2015-03-08 12:59

Rejestracja: 5 lat temu

Ostatnio: 2 dni temu

0

Witam,
Mam picturebox'a, który wyświetla animowanego gifa. Chciałbym, żeby animował się tylko raz, po czym picturebox wyświetlał jego ostatnią klatkę. Gif jest zrobiony przeze mnie w Gimpie, gdzie ustawiłem, że ma się animować raz, a mimo to w programie robi to w nieskończoność.
Próbowałem zrobić nowy wątek, w którym program sprawdzałby, czy wyświetlana przez picturebox klatka nie jest ostatnią. Jeśli tak, to pauzowałby animację. Problem w tym, że nie bardzo wiem jak to zrobić. Czytałem o klasie ImageAnimator, ale nie wiem jak połączyć ją z picturebox'em.

Pozostało 580 znaków

2015-03-08 17:20

Rejestracja: 6 lat temu

Ostatnio: 4 godziny temu

Lokalizacja: Warszawa

2015-03-08 19:01

Rejestracja: 5 lat temu

Ostatnio: 2 dni temu

0

Spróbowałem tak:

System.Drawing.ImageAnimator.StopAnimate(map.Image, OnFrameChanged);

map to picturebox. Nie rozumiem jednak sensu istnienia drugiego parametru. OnFrameChanged to u mnie funkcja pusta.

Pozostało 580 znaków

2015-03-09 18:05

Rejestracja: 5 lat temu

Ostatnio: 2 dni temu

0

Udało mi się zastopować gifa. Jakby ktoś potrzebował:

picturebox.Enabled = false;

Jak widać, wystarczy go wyłączyć.
Teraz potrzebuję sprawdzić numer aktualnej klatki i ilość klatek w gifie. Jakieś pomysły?

Pozostało 580 znaków

Mały Krawiec
2015-03-09 19:30
Mały Krawiec
0

Wszystkie klatki w gifie:

 FrameDimension dimension;
 dimension = new FrameDimension(this.pictureBox1.Image.FrameDimensionsList[0]);
 int frameCount = this.pictureBox1.Image.GetFrameCount(dimension);

Niestety nie mam pojęcia jakby uzyskać aktualną klatkę.

Próbowałem już tak, ale dostaję wyjątek NullReferenceException: Object reference not set to an instance of an object. :/ - gogolon 2015-03-09 19:35

Pozostało 580 znaków

Mały Krawiec
2015-03-09 19:42
Mały Krawiec
0

Przepraszam za double, ale nie mam jeszcze konta.

To pokaż kod bo wrzuciłem na formę picturebox'a, do niego GIFa i dokładnie ten sam kod i pokazuje poprawnie.

Problem polegał na tym, że kod był wrzucony w oddzielny wątek. Dzięki, teraz jeszcze druga połowa zadania i będzie gotowe :D - gogolon 2015-03-09 20:03

Pozostało 580 znaków

2015-03-09 22:34

Rejestracja: 7 lat temu

Ostatnio: 1 tydzień temu

0

@gogolon jeżeli masz Photoshopa to można zrobić takiego gifa z animacją jednokrotną i po problemie. Zakładka Timeline (ustawiasz czas wyświetlenia każdej warstwy i na koniec "ONCE" lub "FOREVER"). Zrobiłem Ci screena:

  • once.jpg (0.09 MB) - ściągnięć: 102
edytowany 2x, ostatnio: Sebastiano, 2015-03-09 22:36

Pozostało 580 znaków

2015-03-10 06:24

Rejestracja: 5 lat temu

Ostatnio: 2 dni temu

0

Dzięki za odpowiedź. Przy tworzeniu gifa korzystałem z Gimpa. Zaznaczyłem, że ma się animować tylko raz. Kiedy odtwarzam go w przeglądarce, wszystko działa jak powinno, w programie już nie :/
Potrzebuję jakiegoś pola lub metody, która zwróci mi aktualną klatkę wyświetlanej animacji. Gdybym miał te dane, skończyłbym warunek nie pozwalający na kolejne odtworzenie tego samego obrazka...

Pozostało 580 znaków

aaaaaaan
2015-03-10 09:50
aaaaaaan

to powinno normalnie działać - oprócz ustawienia że GIF ma się uruchamiać raz możesz ustawić czas wyświetlania ostatniej klatki na nieskończoność lub przynajmniej kilka lat
albo zapisz w innym programie

osobiście zrezygnowałbym z gifów - możesz zrobić obrazek który będzie składał się z klatek obok siebie i wyświetlać w danym czasie określony obszar - w ten sposób masz pełną kontrolę nad wyświetlaniem - możesz w prosty sposób zmieniać czas wyświetlania, pauzować, stopować i zapętlać - tak na przykład działają emotki na facebooku. Oprócz tego obrazek może być wtedy w .png więc może zajmować mniej i mieć większą paletę barw

Pozostało 580 znaków

Odpowiedz

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