Example #1
0
        void provinatore_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            Fotografia foto = (Fotografia)e.UserState;

            bool esistevaRisultante = foto.imgRisultante != null;


            // Rilascio memoria
            AiutanteFoto.disposeImmagini(foto, IdrataTarget.Tutte);

            AiutanteFoto.creaProvinoFoto(foto);

            // Le due foto grandi le rilascio per non intasare la memoria qualora questo metodo è chiamato più volte
            AiutanteFoto.disposeImmagini(foto, IdrataTarget.Originale);
            AiutanteFoto.disposeImmagini(foto, IdrataTarget.Risultante);


            bool esisteRisultante = foto.imgRisultante != null;

            // Siccome è molto probabile che venga idratata l'immagine risultante e siccome sono in un loop,
            // non posso tenere in memoria tanta roba, altrimenti esplode
            if (esisteRisultante && !esistevaRisultante)
            {
                // Significa che l'ho idratata io in questo momento
                AiutanteFoto.disposeImmagini(foto, IdrataTarget.Risultante);
            }


            // Avviso tutti che questa foto è cambiata
            FotoModificateMsg msg = new FotoModificateMsg(this, foto);

            pubblicaMessaggio(msg);
        }
Example #2
0
        /// <summary>
        /// Elimina tutte le Correzioni da una foto e quindi ricrea il provino
        /// </summary>
        public void tornaOriginale(Fotografia fotografia, bool salvare)
        {
            fotografia.correzioniXml = null;

            // Rimuovo anche eventuale file su disco
            string nomeFileRis = PathUtil.nomeCompletoRisultante(fotografia);

            if (File.Exists(nomeFileRis))
            {
                File.Delete(nomeFileRis);
            }

            // Rilascio memoria
            AiutanteFoto.disposeImmagini(fotografia, IdrataTarget.Tutte);

            AiutanteFoto.creaProvinoFoto(fotografia);

            // Le due foto grandi le rilascio per non intasare la memoria qualora questo metodo è chiamato più volte
            AiutanteFoto.disposeImmagini(fotografia, IdrataTarget.Originale);
            AiutanteFoto.disposeImmagini(fotografia, IdrataTarget.Risultante);

            if (salvare)
            {
                Fotografia f = fotografia;
                fotografieRepositorySrv.update(ref f, true);
                fotografieRepositorySrv.saveChanges();                  // Persisto nel db le modifiche

                // Devo informate tutti che questa foto è cambiata
                FotoModificateMsg msg = new FotoModificateMsg(this, fotografia);
                pubblicaMessaggio(msg);
            }
        }
Example #3
0
        public void ruotare(IEnumerable <Fotografia> fotografie, int pGradi)
        {
            Ruota ruota = new Ruota(pGradi);

            // Devo informate tutti che queste foto sono cambiate. Preparo il messaggio
            FotoModificateMsg msg = new FotoModificateMsg(this);

            foreach (Fotografia f in fotografie)
            {
                if (ruota.isAngoloRetto)
                {
                    autoRuotaSuOriginale(f, ruota);
                }
                else
                {
                    addCorrezione(f, ruota);

                    gestoreImmaginiSrv.salvaCorrezioniTransienti(f);
                }
                msg.add(f);
            }

            pubblicaMessaggio(msg);
        }
Example #4
0
        /// <summary>
        /// Aggiungo una correzione a quelle già eventualmente presenti sulla foto.
        /// Se la correzione esiste già, gestisco eventuale somma, oppure rimozione in caso che sia inutile (ininfluente)
        /// </summary>
        /// <param name="fotografia">la foto</param>
        /// <param name="correzione">la correzione da aggiungere</param>
        public void addCorrezione(Fotografia fotografia, Correzione correzioneNuova, bool salvare)
        {
            CorrezioniList correzioni;

            // Deserializzo la stringa con le eventuali correzioni attuali
            if (fotografia.correzioniXml == null)
            {
                correzioni = new CorrezioniList();
            }
            else
            {
                correzioni = SerializzaUtil.stringToObject <CorrezioniList>(fotografia.correzioniXml);
            }


            // Alcune correzioni, non devono andare sempre in aggiunta, ma possono sommarsi l'un l'altra.
            // Per esempio la rotazione. Se ruoto 90° poi altri 90, l'effetto finale è quello di avere una sola da 180°
            Correzione daSost  = null;
            Correzione vecchia = null;

            foreach (Correzione c in correzioni)
            {
                if (c.isSommabile(correzioneNuova))
                {
                    vecchia = c;
                    daSost  = c.somma(correzioneNuova);
                    break;
                }
            }

            if (daSost != null)
            {
                // Sostituisco la correzione con quella ricalcolata
                if (daSost.isInutile)
                {
                    correzioni.Remove(vecchia);
                }
                else
                {
                    correzioni.sostituire(vecchia, daSost);
                }
            }
            else
            {
                // Aggiungo in fondo (se la correzione è inutile, allora non aggiungo nulla)
                if (!correzioneNuova.isInutile)
                {
                    correzioni.Add(correzioneNuova);
                }
            }

            // Ora serializzo di nuovo in stringa tutte le correzioni
            fotografia.correzioniXml = SerializzaUtil.objectToString(correzioni);

            if (salvare)
            {
                fotografieRepositorySrv.saveChanges();                  // Persisto nel db le modifiche

                AiutanteFoto.creaProvinoFoto(fotografia);

                // Devo informare tutti che questa foto è cambiata
                FotoModificateMsg msg = new FotoModificateMsg(this, fotografia);
                pubblicaMessaggio(msg);
            }
        }