La perfetta dissolvenza incrociata

24

Trovo difficile descrivere a parole questo problema, motivo per cui ho realizzato un video (45 secondi) per illustrarlo. Ecco un'anteprima delle domande, per favore dai un'occhiata a Vimeo: link

Laquestionedellacreazionediuncrossfadeperfettoodidissolvenzadidueimmaginioformemièstataricorrenteinuncertonumerodicampinell'ultimodecennio.Primanell'editingvideo,poinell'animazioneFlasheoranellaprogrammazioneiOS.QuandoiniziacercaresuGoogle,cisonomoltisoluzionialternativedatrovare,maquestavoltavogliodavverorisolverequestoproblemasenzaalcuncompromesso.

Ilriepilogo:
Qualèilnomedellatecnicaodellacurvadaapplicarenelladissolvenzaincrociatadiduebitmapsemitrasparenti,dellostessocolore,sesidesiderachelatrasparenzarisultantecorrispondaall'originalediunodeidue?

Esisteunafunzione(matematica)percalcolareinecessarivaloriditrasparenzaparziale/alfaduranteladissolvenza?

Esistonolinguaggidiprogrammazionechehannoquestefunzionicomepredefinite,similiallefunzionieasein,easeouto%co_detrovateinActionScriptoCocoa?

Aggiornamento:Oltrealvideo,hocreatounprogettodiesempio(richiedeXcodeeiOSSDK)elohopubblicatosugithub.Mostralastessaanimazionedelvideo,maquestavoltaconiquadrati: link

    
posta epologee 12.11.2011 - 14:39
fonte

4 risposte

3

Temo che non sia possibile. Ecco come viene calcolata la trasparenza quando si sovrappongono due oggetti: link

Uno degli oggetti deve avere un'opacità di 1 se non vuoi che l'area di sovrapposizione sia visibile.

    
risposta data 02.08.2012 - 21:45
fonte
3

Non so quale potrebbe essere il nome nel campo dell'editing video, ma chiamerei la curva una curva S o curva sigmoidale . Dovrebbe essere molto semplice produrre la dissolvenza incrociata che stai cercando in iOS utilizzando kCAMediaTimingFunctionEaseInEaseOut funzione di temporizzazione. È sufficiente animare la proprietà alpha di due viste in direzioni opposte (una 0- > 1, una 1- > 0) utilizzando tale funzione di temporizzazione:

[UIView beginAnimations:@"crossfade" context:nil];
[UIView setAnimationDuration:1.0];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
view1.alpha = 0.0;
view2.alpha = 1.0;
[UIView commitAnimations];

Nota: dovresti davvero usare i metodi di animazione basati su blocchi invece dei metodi di convenienza di UIView. Ho usato i metodi di UIView sopra perché è molto facile da capire e facile da scrivere dalla memoria. Usare i blocchi non è molto più difficile, però.

Addendum: se non ti piace UIViewAnimationEaseInOut, puoi creare la tua funzione di cronometraggio come descritto in Timing, spazi e CAAnimation . È un po 'più avanzato della semplice animazione sopra illustrata, ma ti dà tutto il controllo che desideri.

    
risposta data 12.11.2011 - 15:15
fonte
1

In computer grafica, questo tipo di funzione è chiamato smoothstep . Quando viene utilizzato per il crossfade, determina il valore alfa globale per la composizione.

Se le immagini di input hanno un canale alfa, devi prima assicurarti che l'alfa sia premoltiplicato . Quindi, puoi eseguire la composizione della dissolvenza incrociata in modo diretto, usando il smoothstep alpha su ciascun canale [ X = A*alpha + B*(1-alpha) ], e aspettati risultati ragionevoli.

    
risposta data 02.08.2012 - 23:14
fonte
0

Puoi usare la funzione di decadimento esponenziale:

Alpha1(time) = 1 - exp(-time / (0.2 * transitionTime)); // fade in
Alpha2(time) = 1 - Alpha1(time); // fade out

Il tuo grafico somiglia più a:

Alpha1(time) = sin(time * 0.5 * pi / transitionTime); // fade in
Alpha2(time) = cos(time * 0.5 * pi / transitionTime); // fade out
    
risposta data 15.11.2011 - 10:50
fonte

Leggi altre domande sui tag