Seite 1 von 1

AnimGIF auf Window?

Verfasst: 31.10.2016 16:43
von DarkSoul
Hallo,

wie stelle ich ein AnimGIF am besten und ressourcensparend auf einem Window dar?

Soll ein Bildschirmschoner werden (GIF auf einem schwarzen Fenster). Er ähnelt vom Verhalten dem Standardbildschirmschoner von XP.

- Startdrawing + Timer (derzeitige Lösung) sind zu CPU-lastig, weil er permanent am rendern ist.
- Das GIF muss gefaded werden können (also einblenden -> 10 sek laufen lassen -> ausblenden -> Anzeige versetzen -> einblenden... )
- Das GIF hat keine wirkliche transparenz (Hintergrund ist eh einheitlich schwarz)
- Das GIF muss eine ruckelfreie Endlosschleife haben.
- Das GIF kann auch ein anderes Format haben oder aus einzelnen statischen Frames bestehen (aber verlustfrei! Nicht JPEG o.ä.)
- Das GIF wird in die Binary eingebunden und der Screensaver muss ohne Temp-Dateien auskommen (Darum ist da Format auch zweitrangig)
- Das GIF ist eine Pixel-Art mit max. 16 verschiedenen Farben. Wäre schön, wenn eine Nearest-Neighbour-Skalierung enthalten ist (1x, 2x, 4x, 8x)
- Der Screensaver ist für Win2000 oder höher (Die alte 9x-Passwort-Api-Geschichte ist nicht implementiert)


Ich konnte im Internet nur eine Lösung mit IE-WebView finden. Gefällt mir irgendwie nicht :cry: Der WebView unter Windows ist uralt und wird CSS-Transitions (für den Fader) wohl nicht verstehen.

Ich brauche quasi die WinAPI-Gegenstücke für die nachfolgenden ObjC-Codehäppchen:

Code: Alles auswählen

...
//View-Setup
UIImageView* animatedImageView = [[UIImageView alloc] initWithFrame:self.view.bounds];
animatedImageView.animationImages = [NSArray arrayWithObjects:    
                               [UIImage imageNamed:@"image1.gif"],
                               [UIImage imageNamed:@"image2.gif"],
                               [UIImage imageNamed:@"image3.gif"],
                               [UIImage imageNamed:@"image4.gif"], nil];
animatedImageView.animationDuration = 1.0f;
[animatedImageView startAnimating];
[self.view addSubview: animatedImageView];
...
//fade-in
animatedImageView.alpha = 0;
[UIImageView animateWithDuration:1.0
                 animations:^{
                     animatedImageView.alpha = 1;
                 }
                 completion:^(BOOL finished){
                     //10 sec warten, dann fade-out
                 }];
...
//fade-out
animatedImageView.alpha = 1;
[UIImageView animateWithDuration:1.0
                 animations:^{
                     animatedImageView.alpha = 0;
                 }
                 completion:^(BOOL finished){
                      //ImageView versetzen, dann fade-in
                 }];