AnimGIF auf Window?

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
DarkSoul
Beiträge: 689
Registriert: 19.10.2006 12:51

AnimGIF auf Window?

Beitrag 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
                 }];
Bild