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