Newsgroup: it.comp.lang.visual-basic
Titolo: Dissolvenza di immagini

Qualcuno sa come ottenere (in modo rapido) la dissolvenza tra due BMP?
Bye by Massimo 8-]
P.S. Se segnalate siti sull'argolento, ancora meglio...

Qualcuno sa come ottenere (in modo rapido) la dissolvenza tra due BMP?
Guarda, io ho iniziato a vedere un pò di cose sull'argomento
in maniera del tutto empirica e cioè scrivendo codice...
Per fare una cosa di quel tipo comincia a vedere le varie API
getPixel e setPixel, per farlo usa una logica del tipo:
partendo dalla prima cambio il corrispondente pixel fino ad 
arrivare a quello della seconda immagine.

 Qualcuno sa come ottenere (in modo rapido) la dissolvenza tra due BMP?
"In modo rapido" č chiedere troppo
La rapiditą si ottiene solo col precalcolo, ma per avere un precalcolo
completo devi sapere esattamente qualģč l'immagine doi partenza, qual'č
quella di arrivo e quanti passaggi vuoi.
Se ti accontenti di avere una velocitą medio bassa (diciamo circa 1 secondo
a frame) puoi usare questo metodo:
Dichiara 2 array di tipo RGB:
Private Type TipoRGB
   R As Integer
   G As Integer
   B As Integer
End Type
Dim PixelsPartenza() As TipoRGB
Dim PixelsArrivo() As TipoRGB
In fase di apertura delle 2 picture, compila i due array con i rispettivi
valori:
ReDim PixelsPartenza(lDimensioneX, lDimensioneY)
ReDim PixelsArrivo(lDimensioneX, lDimensioneY)
For lX = 0 To lDimensioneX - 1
   For lY = 0 To lDimensioneY - 1
      ' componenti colore del pixel di partenza
      dColore = GetPixel(Pic.hdc, lX, lY)
      PixelsPartenza(lX, lY).R = dColore Mod 256
      PixelsPartenza(lX, lY).G = (dColore \ 256) Mod 256
      PixelsPartenza(lX, lY).B = dColore \ K256alQuadrato
      ' componenti colore del pixel di arrivo
      dColore = GetPixel(Picture2.hdc, lX, lY)
      PixelsArrivo(lX, lY).R = (dColore Mod 256)
      PixelsArrivo(lX, lY).G = ((dColore \ 256) Mod 256)
      PixelsArrivo(lX, lY).B = (dColore \ K256alQuadrato)
   Next
Next
Il ciclo da eseguire č il seguente:
For R = 1 To NumeroPassaggi
   MoltiplicatorePartenza = (NumeroPassaggi - R) / NumeroPassaggi
   MoltiplicatoreArrivo = R / NumeroPassaggi
   For lX = 0 To lDimensioneX - 1
      For lY = 0 To lDimensioneY - 1
         dColore = Calcola(PixelsPartenza(lX, lY).R, PixelsArrivo(lX, lY).R,
MoltiplicatorePartenza, MoltiplicatoreArrivo)
         dColore = dColore + Calcola(PixelsPartenza(lX, lY).G,
PixelsArrivo(lX, lY).G, MoltiplicatorePartenza, MoltiplicatoreArrivo) * 256!
         dColore = dColore + Calcola(PixelsPartenza(lX, lY).B,
PixelsArrivo(lX, lY).B, MoltiplicatorePartenza, MoltiplicatoreArrivo) *
K256alQuadrato
         SetPixel Pic.hdc, lX, lY, dColore
      Next
   Next
   Pic.Refresh
   DoEvents
Next
La funziona calcola č questa:
Private Function Calcola(ComponentePartenza As Integer, ComponenteArrivo As
Integer, MoltiplicatorePartenza As Single, MoltiplicatoreArrivo As Single)
As Long
   Calcola= (ComponentePartenza * MoltiplicatorePartenza) +
(ComponenteArrivo * MoltiplicatoreArrivo)
End Function
Manca sicuramente qualche dichiarazione, ma dovrebbe essere banale
recuperarle. Ad esempio K256AlQuadrato contiene ovviamente il numero che si
ottiene elevando al quadrato 256. dColore č stato dichiarato come double, ma
puņ essere anche un long (anzi č pure + veloce).
L'importante č che lavori sempre in pixel. Quindi ricordati di settare a
Pixel lo scalemode delle picturebox che usi.
Ciao
*Roby*
P.S.
Se non vuoi morire di inedia aspettando il risultato, fai girare il
programma con immagini piccole, non superare i 5 passaggi tra una immagine e
l'altra, e usa solo il compilato, che č almeno il 30% + veloce del sorgente.
P.S.2
Lo sapevo che non dovevo ricominciare a leggere il newsgroup. E' troppo
pieno di spunti interessanti...

 pieno di spunti interessanti...
si comincia coi ng leggeri, poi...
bentornato :)
visti gli ultimi post sul meeting ? faccio il birro: prendi l'autostrada in
direz. nord, a bologna (direi casalecchio) --> tangenziale --> uscita fiera
/ stalingrado (direz. sud).
magari continua a seguire il ng. non vorrei ti ritrovassi in un parcheggio
vuoto...
push push
a.

 direz. nord, a bologna (direi casalecchio) --> tangenziale -->
Autostrada?? Io in realtą pensavo di venire in treno.
Vado a cercarmi i post.
Ciao
*Roby*

 Autostrada?? Io in realtą pensavo di venire in treno.
ok, anche hal.
dall'uno e l'altro mar...
la direzione cmq e' la stessa.
non -- dico _non_ -- andare verso sud...
noi birri siamo precisissimi.