Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it L'avatar di longline
    Registrato dal
    Sep 2001
    Messaggi
    5,363

    Da un colore ad un altro

    Ciao!
    Ho due istanze, di due colori diversi espressi in esadecimale. Devo trovare il modo di trovare i N colori intermedi tra il colore iniziale e il colore finale.

    Mi spiego con un esempio: immaginiamo che il colore iniziale sia definito come 0x0099AA, il colore finale sia 0x33CCDD, e che io debba trovare 2 livelli intermedi.

    Il risultato finale dovrebbe essere questo:
    codice:
    Colore Iniziale - 0x0099AA
    Intermedio 1    - 0x11AABB
    Intermedio 2    - 0x22BBCC
    Colore Finale   - 0x33CCDD
    La logica sarebbe di dividere i singoli valori dei canali RGB, fare la differenza tra i rispettivi canali tra il colore iniziale e il finale, poi calcolare i rispettivi incrementi, per ottenere i valori intermedi su ogni canale.
    Il mio problema è che non ho ancora dimestichezza con i formati numerici in Actionscript e non so come fare.

    In pratica l'aiuto che mi servirebbe sarebbe: dato un valore esadecimale come faccio a prendere il valore corrispondente al canale rosso, al canale verde, al canale blu e a metterlo in una variabile? Poi, una volta che ho nuovi valori per i canali, come rimetterli insieme in un solo valore esadecimale che mi rapresenti un colore RGB?

    Grazie!

  2. #2
    Utente di HTML.it L'avatar di longline
    Registrato dal
    Sep 2001
    Messaggi
    5,363
    Potrei fare così:

    1) prendo un valore esadecimale (ad esempio 16711849) e lo converto in un valore tipo "lettere e numeri" (FF00A9)
    2) converto in stringa il valore FF00A9 e prendo i caratteri a due a due per valorizzare variabili corrispondenti ai singolicanali RGB.
    3) dopo avere fatto le oppurtune operazioni sui valori, mettere insieme i tre valori R, G e B in un unico valore esadecimale.

    Come eseguire le tre operazioni?

  3. #3
    Utente di HTML.it L'avatar di negatyve
    Registrato dal
    Feb 2001
    Messaggi
    9,479
    Ho cercato di rendere il codice più chiaro possibile così si capisce cosa fa
    codice:
    // riceve come parametri il colore iniziale,
    // il colore finale, e il numero di passaggi
    // compresi il primo e l'ultimo: restituisce
    // un array di colori
    function coloriIntermedi(iniziale, finale, passaggi)
    {
    	// scomponi il colore iniziale nei canali rgb
    	var inirgb = {
    		r: iniziale >> 16 & 0xFF,
    		g: iniziale >> 8  & 0xFF,
    		b: iniziale >> 0  & 0xFF
    	}
    	// scomponi il colore finale nei canali rgb
    	var finrgb = {
    		r: finale >> 16 & 0xFF,
    		g: finale >> 8  & 0xFF,
    		b: finale >> 0  & 0xFF
    	}
    	// trova le distanze
    	var delta = {
    		r: (finrgb.r - inirgb.r) / (passaggi - 1),
    		g: (finrgb.g - inirgb.g) / (passaggi - 1),
    		b: (finrgb.b - inirgb.b) / (passaggi - 1)
    	}
    	// crea l'array di colori
    	var c = new Array(), r, g, b
    	for(var i = 0; i < passaggi; i++)
    	{
    		r = (inirgb.r + (delta.r * i));
    		g = (inirgb.g + (delta.g * i));
    		b = (inirgb.b + (delta.b * i));
    		c.push(r << 16 | g << 8 | b);
    	}
    	return c;
    }
    var colori = coloriIntermedi(0x0099AA, 0x33CCDD, 4);
    
    // ===============================
    // da qui in sotto è solo per test
    // ===============================
    var colorituoi = [0x0099AA, 0x11AABB, 0x22BBCC, 0x33CCDD];
    function createQuad(d, x, y)
    {
    	var mc = this.createEmptyMovieClip("mc" + d, d);
    	mc._x = x;
    	mc._y = y;
    	mc.beginFill(0x000000, 100);
    	mc.lineTo(50, 0 );
    	mc.lineTo(50, 50);
    	mc.lineTo(0 , 50);
    	mc.lineTo(0 , 0 );
    	mc.endFill();
    	return mc;
    }
    for(var i = 0; i < colori.length; i++)
    {
    	new Color(createQuad(i, 50 * i, 0)).setRGB(colori[i]);
    	new Color(createQuad(i + 10, 50 * i, 50)).setRGB(colorituoi[i]);
    }

  4. #4
    Utente di HTML.it L'avatar di longline
    Registrato dal
    Sep 2001
    Messaggi
    5,363
    Purtroppo non ad usare la funzione coloriIntermedi.. non funziona.

    Nel frattempo però ho scritto io del codice che apre funzionare, ma penso che abbia bisogno di una messa a punto. Infatti se inverto il colore di destinazione e il colore di partenza, la sfumatura non si "gira" simmetricamente, ma cambiano le tonalità intermedie. Ovviamente imamgino che sia sempre un problema di operazioni in esadecimale.

    Posto qui il codice nella speranza di un "intervento provvidenziale"

    note: Colore1Grafica e Colore2Grafica sono ovviamente i colori di partenza e di arrivo. Secondo me i problemi sono a livello di calcolo delle variabili "Incremento" e "TintaIntermedia".
    codice:
    function Sfumatura(){
    	R1 = Colore1Grafica >> 16;
    	G1 = (Colore1Grafica >> 8) - (R1 << 8);
    	B1 = Colore1Grafica - (R1 << 16) - (G1 << 8);
    	R2 = Colore2Grafica >> 16;
    	G2 = (Colore2Grafica >> 8) - (R2 << 8);
    	B2 = Colore2Grafica - (R2 << 16) - (G2 << 8);
    	NumeroPassaggi = 14;
    	IncrementoR = Int(R2 - R1) / NumeroPassaggi;
    	IncrementoG = Int(G2 - G1) / NumeroPassaggi;
    	IncrementoB = Int(B2 - B2) / NumeroPassaggi;
    	TintaIntermedia = Colore1Grafica;
    	trace(IncrementoR + "." + IncrementoR.ToString(16) + " " + IncrementoG.ToString(16) + " " + IncrementoB.ToString(16));
    	for(var IntermedioDaColorare = 1; IntermedioDaColorare < (NumeroPassaggi+1); IntermedioDaColorare++){
    		TintaIntermedia = TintaIntermedia + (IncrementoR << 16) + (IncrementoG << 8) + IncrementoB;
    		ColoraIntermedio(IntermedioDaColorare,TintaIntermedia);
    	}
    }
    
    function ColoraIntermedio(Intermedio, Colore){
    	my_color = new Color(_root.istGrafica["istx" + (NumeroPassaggi - Intermedio + 1)]);
    	my_color.setRGB(Colore);
    }

  5. #5
    Utente di HTML.it L'avatar di longline
    Registrato dal
    Sep 2001
    Messaggi
    5,363
    Un esempio di quello che succede.

    Da giallo a blu.

  6. #6
    Utente di HTML.it L'avatar di longline
    Registrato dal
    Sep 2001
    Messaggi
    5,363
    Ho dimenticato l'allegato

    Da giallo a blu

  7. #7
    Utente di HTML.it L'avatar di longline
    Registrato dal
    Sep 2001
    Messaggi
    5,363
    Da blu a giallo

  8. #8
    Utente di HTML.it L'avatar di negatyve
    Registrato dal
    Feb 2001
    Messaggi
    9,479
    Aspetta:

    1. per quale versione del flash player e di actionscript stai esportando il filmato?
    2. cosa non funziona nel codice che ti ho postato?

  9. #9
    Utente di HTML.it L'avatar di longline
    Registrato dal
    Sep 2001
    Messaggi
    5,363
    1. FlashMX, e gli SWF li provo in Opera e Firefox.
    2. Non succede nulla.

  10. #10
    Utente di HTML.it L'avatar di negatyve
    Registrato dal
    Feb 2001
    Messaggi
    9,479
    Se tu prendi il codice, e lo metti in un filmato nuovo ed esporti, non succede nulla? non è che stai esportando per il flash player 5?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.