示例#1
0
 /**
  * Data una foto recupero il percorso della foto che sara venduta.
  */
 public static string nomeCompletoVendita(Fotografia foto)
 {
     // Ho delle correzioni che non sono ancora state applicate. Lo faccio adesso.
     if (AiutanteFoto.esisteFileRisultante(foto))
     {
         return(nomeCompletoRisultante(foto));
     }
     else
     {
         return(nomeCompletoOrig(foto));
     }
 }
示例#2
0
        /// <summary>
        /// Voglio ricavare l'immagine grande.
        ///  Se la foto in esame possiede una immagine grande risultante (quindi modificata) prendo quella.
        ///  Se invece non esiste l'immagine modificata, prendo quella grande originale.
        ///  L'immagine in questione viene anche idratata
        /// </summary>
        /// <param name="foto"></param>
        /// <returns></returns>
        public static IImmagine idrataImmagineGrande(Fotografia foto)
        {
            IImmagine immagine = null;

            if (esisteFileRisultante(foto))
            {
                AiutanteFoto.idrataImmaginiFoto(foto, IdrataTarget.Risultante);
                immagine = foto.imgRisultante;
            }

            // Se non l'ho trovata, prendo l'immagine grande originale
            if (immagine == null)
            {
                AiutanteFoto.idrataImmaginiFoto(foto, IdrataTarget.Originale);
                immagine = foto.imgOrig;
            }
            return(immagine);
        }
示例#3
0
        /// <summary>
        /// Devo stampare la foto.
        /// Quindi mi serve indietro una immagine grande, che può essere l'originale, oppure quella modificata.
        /// L'immagine modificata, però potrebbe ancora non essere stata calcolata. In tal caso ci penso io.
        ///
        /// </summary>
        /// <param name="foto"></param>
        /// <returns>il nome del file interessato su disco</returns>
        public static string idrataImmagineDaStampare(Fotografia foto)
        {
            IdrataTarget quale = qualeImmagineDaStampare(foto);

            // Ho delle correzioni che non sono ancora state applicate. Lo faccio adesso.
            if (foto.imgRisultante == null && foto.correzioniXml != null)
            {
                // Se il file esiste già su disco, allora uso quello.
                if (!File.Exists(PathUtil.nomeCompletoRisultante(foto)))
                {
                    creaRisultanteFoto(foto);
                }
            }

            var nome = AiutanteFoto.idrataImmaginiFoto(foto, quale, true);

            return(nome);
        }
示例#4
0
        /// <summary>
        /// Imposta una immagine per il fotografo (con la sua faccia)
        /// </summary>
        /// <param name="nomeFileImmagine">path completo. Se nullo, elimino la foto attuale</param>
        /// <param name="fotografo">il fotografo da ritrarre</param>
        public static void setImmagineFotografo(string nomeFileImmagine, Fotografo fotografo)
        {
            string nomeFileDest = AiutanteFoto.nomeFileImgFotografo(fotografo);


            if (nomeFileImmagine != null)
            {
                DirectoryInfo dInfo = new DirectoryInfo(nomeFileDest).Parent;
                if (!dInfo.Exists)
                {
                    Directory.CreateDirectory(dInfo.FullName);
                }

                if (File.Exists(nomeFileDest))
                {
                    // Potrebbe avere il flag di readonly
                    // Elimino gli attributi solo lettura
                    File.SetAttributes(nomeFileDest, File.GetAttributes(nomeFileDest) & ~(FileAttributes.ReadOnly));
                }

                // copio con sovrascrittura
                File.Copy(nomeFileImmagine, nomeFileDest, true);

                // Potrebbe avere il flag di readonly
                // Elimino gli attributi solo lettura
                File.SetAttributes(nomeFileDest, File.GetAttributes(nomeFileDest) & ~(FileAttributes.ReadOnly) | FileAttributes.Archive);

                string msg = string.Format("Impostata immagine fotografo: {0} immagine: {1}", fotografo.cognomeNome, nomeFileImmagine);
                _giornale.Info(msg);
            }
            else
            {
                if (File.Exists(nomeFileDest))
                {
                    File.Delete(nomeFileDest);
                    _giornale.Info("Eliminata immagine per il fotografo " + fotografo.cognomeNome);
                }
            }
        }
示例#5
0
        public static void setImmagineFotografo(Fotografia fotografia, Fotografo fotografo)
        {
            string nomeFile = AiutanteFoto.idrataImmagineDaStampare(fotografia);

            setImmagineFotografo(nomeFile, fotografo);
        }
示例#6
0
        /// <summary>
        /// Creo il Provino, e/o la Risultante di una foto e scrivo l'immagine su disco nel file indicato
        /// </summary>
        /// <param name="nomeFileSorgente">E' il nome del file della foto vera, grande</param>
        /// <param name="foto"></param>
        private static void creaCacheFotoSuDisco(Fotografia foto, IdrataTarget quale, string nomeFileOriginale)
        {
            _giornale.Debug("Creo provino foto n." + foto.numero + "  target=" + quale);

            Debug.Assert(quale == IdrataTarget.Provino || quale == IdrataTarget.Risultante);

            IGestoreImmagineSrv gis = LumenApplication.Instance.getServizioAvviato <IGestoreImmagineSrv>();
            IFotoRitoccoSrv     fr  = LumenApplication.Instance.getServizioAvviato <IFotoRitoccoSrv>();

            // Carico l'immagine grande originale (solo la prima volta)
            bool caricataOrig = false;

            if (foto.imgOrig == null)
            {
                _giornale.Debug("carico immagine originale da disco: " + nomeFileOriginale);
                foto.imgOrig = gis.load(nomeFileOriginale);
                caricataOrig = true;
            }

            // carico eventuali correzioni
            CorrezioniList correzioni = null;

            if (foto.correzioniXml != null)
            {
                try {
                    correzioni = SerializzaUtil.stringToObject <CorrezioniList>(foto.correzioniXml);
                } catch (Exception ee) {
                    // Se ci fossero inciampi con le correzioni, preferisco perderle che far saltare tutto.
                    // Non dovrebbe mai capitare.
                    _giornale.Error("Deserializza correzioni foto = " + foto.id, ee);
                }
            }

            // Se devo crere il provino ma la foto contiene la correzione di Zoom,
            // devo passare dalla foto grande, altrimenti perde di qualità
            bool devoPassareDallaGrande = false;

            if (quale == IdrataTarget.Risultante)
            {
                devoPassareDallaGrande = true;
            }
            if (correzioni != null && correzioni.Contains(typeof(Zoom)))
            {
                devoPassareDallaGrande = true;
            }


            // Se richiesto nella configurazione, scrivo direttamente sul provino le righe tratteggiate di rispetto area stampabile
            bool aggiungiCorrezioneAreaRispetto = false;

            if (Configurazione.UserConfigLumen.imprimereAreaDiRispetto)
            {
                if (quale == IdrataTarget.Provino)
                {
                    if (correzioni == null)
                    {
                        correzioni = new CorrezioniList();
                    }
                    if (!correzioni.Contains(typeof(AreaRispetto)))
                    {
                        aggiungiCorrezioneAreaRispetto = true;
                    }
                }
            }



            // Cancello il file Risultante da disco perchè tanto sta per cambiare.
            IImmagine immagineDestinazione = null;

            foto.imgRisultante = null;
            string nomeFileRisultante = PathUtil.nomeCompletoFile(foto, IdrataTarget.Risultante);

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

            // Eventuale creazione delle cartelle di destinazione (potrebbero non esistere)
            PathUtil.creaCartellaProvini(foto);
            PathUtil.creaCartellaRisultanti(foto);

            // OK partiamo!
            if (devoPassareDallaGrande)
            {
                immagineDestinazione = (IImmagine)foto.imgOrig.Clone();                         // creo un duplicato della Originale per poi lavorarci
            }
            else
            {
                immagineDestinazione = gis.creaProvino(foto.imgOrig);                           // creo una immagine più piccola
            }
            // applico eventuali correzioni
            if (correzioni != null)
            {
                IdrataTarget tempQuale = quale;
                if (devoPassareDallaGrande && quale == IdrataTarget.Provino)
                {
                    tempQuale = IdrataTarget.Risultante;
                }

                if (aggiungiCorrezioneAreaRispetto && tempQuale == IdrataTarget.Provino)
                {
                    correzioni.Add(areaRispetto);
                }

                immagineDestinazione = fr.applicaCorrezioni(immagineDestinazione, correzioni, tempQuale);

                // NO : non funziona sempre bene.
                // Se sto facendo un provino che prevede lo zoom, devo passare dalla immagine grande,
                // quindi sono obbligato a ricalcolare la Risultante e quindi rimpicciolirla.
                // quindi per essere efficiente, salvo la Risultante che ho già pronta (cosi risparmio tempo dopo)
                if (devoPassareDallaGrande && quale == IdrataTarget.Provino)
                {
                    gis.save(immagineDestinazione, nomeFileRisultante);
                    foto.imgRisultante = immagineDestinazione;

                    // Poi la ritaglio per fare il provino buono.
                    immagineDestinazione = gis.creaProvino(immagineDestinazione);

                    // Aggiungo l'area di rispetto al provino
                    if (aggiungiCorrezioneAreaRispetto)
                    {
                        immagineDestinazione = fr.applicaCorrezione(immagineDestinazione, areaRispetto);
                    }
                }
            }

            // Salvo su disco l'immagine di destinazione
            string nomeFileDest = PathUtil.nomeCompletoFile(foto, quale);

            gis.save(immagineDestinazione, nomeFileDest);

            _giornale.Debug("Ho ricreato il file immagine di cache: " + nomeFileDest);

            // Eventualmente chiudo l'immagine grande se l'avevo aperta io.
            // Il provino, invece lo lascio aperto (non so se mi causerà problemi di memoria)
            if (caricataOrig)
            {
                AiutanteFoto.disposeImmagini(foto, IdrataTarget.Originale);
            }

            // Modifico la foto che mi è stata passata.
            if (quale == IdrataTarget.Provino)
            {
                foto.imgProvino = immagineDestinazione;
            }
            if (quale == IdrataTarget.Risultante)
            {
                foto.imgRisultante = immagineDestinazione;
            }
        }