Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di RokStar
    Registrato dal
    Dec 2001
    Messaggi
    937

    Array - Contare occorrenze uguali

    Sto facendo uno script per photoshop per creare una cartella colori a partire da un'immagine, utilizzando javascript.

    Per il momento lo script agisce così:
    - prendo il documento;
    - unisco i livelli visibili;
    - controllo se lo spazio colore dell'immagine è rgb, in caso contrario lo cambio in rgb;
    - creo una variabile che mi recupera l'altezza in pixel dell'immagine;
    - creo una variabile che mi recupera la larghezza in pixel dell'immagine;
    - creo un ciclo che per ogni pixel (quindi finché i = 0 è <= altezza e finché j = 0 è <= larghezza) prende i valori R, G, e B.

    A questo punto non so come è meglio procedere... la mia idea era di creare un'array e popolarla, ma forse converrebbe un'array associativa, con i valori RGB e il numero di occorrenze trovate, solo che al momento ho la mente ottenebrata e non so come farlo L'alternativa sarebbe popolare tutta l'array, poi ordinarla e infine prendere ogni tripletta di valori RGB e contare quanti ce ne sono... però mi sembra molto meno performante. A tal proposito, è possibile creare array associative, e come, con javascript? Qual è il corrispetto della funzione in_array() di php che controlla se dentro un'array c'è il dato che cerco?

    In pratica dovrebbe venire qualcosa del tipo array[(R, G, B) => (7), (R,G,B) => (1)] etc... dove R,G,B variano di volta in volta... alla fine dovrei ordinarle per il secondo valore della coppia, vale a dire il numero di volte che è stata trovata la terna RGB.
    che ce l'hai tre e cinco? Tre e cinco?!?

  2. #2
    è possibile creare dei dizionari in JS, ma le chiavi possono essere solo stringhe. Potresti creare un dizionario con il corrispondente colore HTML

    codice:
    var datas = {
       "#FFFFFF" : 1,
       "#CECECE" : 6
    };
    per controllare se una chiave esiste ti basta chiamarla:

    codice:
    if(datas["#FFFFFF"]) //return true
    
    if(datas["#AFAFAF"]) //return false
    ma per i valori non c'è un metodo, ti conviene scorrere tutto il dizionario e controllare se c'è il valore.

    codice:
    function TestObject(obj, value){
    	for(var x in obj)
    		if(value == obj[x]) return true;
    	return false;
    }
    
    alert(TestObject(datas, 2));
    alert(TestObject(datas, 6));
    I DON'T Double Click!

  3. #3
    Ciao,
    non tempo per seguire tutto il tuo ragionamento
    ma giusto due info
    in js gli arrays associativi sono oggetti
    http://www.quirksmode.org/js/associative.html
    in_array
    http://phpjs.org/functions/in_array:432



    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  4. #4
    Utente di HTML.it L'avatar di RokStar
    Registrato dal
    Dec 2001
    Messaggi
    937
    Grazie ad entrambi. Sto impazzendo a leggere la documentazione di JS per photoshop (non è che sia proprio ordinato il documento...) oltre che ad avere lacune con javascript in generale
    Ma in fin dei conti mi diverto per questo
    che ce l'hai tre e cinco? Tre e cinco?!?

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.