From 8111f8dfc5ea659171514142593d2468033ea323 Mon Sep 17 00:00:00 2001 From: Maddo Date: Tue, 2 Aug 2016 13:22:13 +0200 Subject: [PATCH] ayy --- CatalogLib/CatalogLib.csproj | 6 +- CatalogLib/ImageCreator.cs | 237 +++++++++++++++++++++-------------- CatalogLib/PicSettings.cs | 21 +++- CatalogLib/SinglePicData.cs | 22 ++++ 4 files changed, 186 insertions(+), 100 deletions(-) create mode 100644 CatalogLib/SinglePicData.cs diff --git a/CatalogLib/CatalogLib.csproj b/CatalogLib/CatalogLib.csproj index b3be219..9c15f91 100644 --- a/CatalogLib/CatalogLib.csproj +++ b/CatalogLib/CatalogLib.csproj @@ -1,5 +1,5 @@  - + Debug @@ -9,12 +9,13 @@ Properties CatalogLib CatalogLib - v4.5 + v4.6 512 SAK SAK SAK SAK + true @@ -48,6 +49,7 @@ + diff --git a/CatalogLib/ImageCreator.cs b/CatalogLib/ImageCreator.cs index ba4f2f1..0b5ab67 100644 --- a/CatalogLib/ImageCreator.cs +++ b/CatalogLib/ImageCreator.cs @@ -14,12 +14,16 @@ namespace CatalogLib public class ImageCreator { - #region "dichiarazioni" + #region Variabili + private SinglePicData _singlePicData; + private PicSettings _picSettings; - private bool FotoRuotaADestra = false; + private Rotazione _rotation; - private bool FotoRuotaASinistra = false; + //private bool FotoRuotaADestra = false; + + //private bool FotoRuotaASinistra = false; private string TempMinText = ""; //Private crFont1 As Font @@ -83,56 +87,87 @@ namespace CatalogLib #endregion - public ImageCreator(string nomeFileChild, DirectoryInfo sourceDir, DirectoryInfo destDir, DirectoryInfo destDirStart) + //public ImageCreator(string nomeFileChild, DirectoryInfo sourceDir, DirectoryInfo destDir, DirectoryInfo destDirStart) + //{ + // this.NomeFileChild = nomeFileChild; + // SourceDir = sourceDir; + // DestDir = destDir; + // DestDirStart = destDirStart; + // WorkFile = new FileInfo(nomeFileChild); + //} + + //public ImageCreator(string nomeFileChild, DirectoryInfo sourceDir, DirectoryInfo destDir) + //{ + // NomeFileChild = nomeFileChild; + // DestDir = destDir; + //} + + //public ImageCreator(FileInfo file, DirectoryInfo destination) + //{ + // WorkFile = file; + // DestDir = destination; + //} + + public ImageCreator(SinglePicData picData, PicSettings picSettings) { - this.NomeFileChild = nomeFileChild; - SourceDir = sourceDir; - DestDir = destDir; - DestDirStart = destDirStart; - WorkFile = new FileInfo(nomeFileChild); - } - - public ImageCreator(string nomeFileChild, DirectoryInfo sourceDir, DirectoryInfo destDir) - { - NomeFileChild = nomeFileChild; - DestDir = destDir; - } - - public ImageCreator(FileInfo file, DirectoryInfo destination) - { - WorkFile = file; - DestDir = destination; - } - - public StringDigitSubstitute CreaImmagineThread(string info) - { - + } + /// + /// Elabora l'immagine + /// + /// Non ne ho idea. ToDo: capire a che serve public void CreaImmagineThread(string info) { - CatalogLib.PicSettings ps = new CatalogLib.PicSettings(); + //CatalogLib.PicSettings ps = new CatalogLib.PicSettings(); + PreparaVariabili(); + + // Workfile deve essere impostato esternamente. ToDo: passarlo come parametro così da potere riutilizzare la classe senza eliminarla e ricrearla Image g = Image.FromFile(WorkFile.FullName); + ImpostaTestoExtra(g); + // Rotazione immagine in base ai dati EXIF + Rotation(ref g); - if (ps.CreaMiniature) + // Impostazione del formato + // todo: mettere una selezione più specifica invece di assumere jpg + ImageFormat currentFormat = g.RawFormat; + if (_picSettings.UsaForzaJpg) { - CreaMiniature(); + currentFormat = ImageFormat.Jpeg; } + PrepareThumbnailSize(g); + + // big image resolution + var imgOutputBig = new Bitmap(g, thumbSizeBig.Width, thumbSizeBig.Height); + imgOutputBig.SetResolution(g.HorizontalResolution, g.VerticalResolution); + + + if (_picSettings.CreaMiniature) + { + + CreaMiniature(g, imgOutputBig, currentFormat); + } + + + + + } private void Rotation(ref System.Drawing.Image g) { - FotoRuotaADestra = false; - FotoRuotaASinistra = false; + //FotoRuotaADestra = false; + //FotoRuotaASinistra = false; + _rotation = Rotazione.Normale; - if (CatalogVbLib.PicSettings.UsaRotazioneAutomatica == true) + if (_picSettings.UsaRotazioneAutomatica) { // ci sono dati exif if (g.PropertyIdList.Length > 0) @@ -151,7 +186,8 @@ namespace CatalogLib break; case ExifReader.Orientations.LftBottom: - FotoRuotaASinistra = true; + //FotoRuotaASinistra = true; + _rotation = Rotazione.Sinistra; break; case ExifReader.Orientations.RightBottom: @@ -169,68 +205,80 @@ namespace CatalogLib } } - if (FotoRuotaASinistra == true) + if (_rotation == Rotazione.Sinistra) { g.RotateFlip(RotateFlipType.Rotate270FlipNone); - } - if (FotoRuotaADestra == true) + }else + if (_rotation == Rotazione.Destra) { g.RotateFlip(RotateFlipType.Rotate90FlipNone); } - + // todo: capire quando va ruotato a destra } + /// + /// Aggiunge orario e tempo gara + /// + /// private void ImpostaTestoExtra(Image g) { - if (CatalogVbLib.PicSettings.UsaOrarioTestoApplicare || - CatalogVbLib.PicSettings.UsaTempoGaraTestoApplicare || - CatalogVbLib.PicSettings.UsaOrarioMiniatura || - CatalogVbLib.PicSettings.TestoMin || - CatalogVbLib.PicSettings.AggTempoGaraMin || - CatalogVbLib.PicSettings.AggNumTempMin) + if (_picSettings.UsaOrarioTestoApplicare || + _picSettings.UsaTempoGaraTestoApplicare || + _picSettings.UsaOrarioMiniatura || + _picSettings.TestoMin || + _picSettings.AggTempoGaraMin || + _picSettings.AggNumTempMin) { if (g.PropertyIdList.Length > 0) //ci sono dati exif { var datiExix = new ExifReader((Bitmap)g); dataFoto = datiExix.DateTimeOriginal; - testoFirma = CatalogVbLib.PicSettings.TestoFirmaStart; - testoFirmaV = CatalogVbLib.PicSettings.TestoFirmaStartV; + testoFirma = _picSettings.TestoFirmaStart; + testoFirmaV = _picSettings.TestoFirmaStartV; if (dataFoto.Year != 1) { testoFirmaPiccola = dataFoto.ToShortDateString(); - if (CatalogVbLib.PicSettings.UsaOrarioTestoApplicare) + if (_picSettings.UsaOrarioTestoApplicare) { - testoFirma = string.Concat(testoFirma, " ", dataFoto.ToShortDateString(), " ", - dataFoto.ToLongDateString()); - testoFirmaV = string.Concat(testoFirmaV, " ", dataFoto.ToShortDateString(), " ", - dataFoto.ToLongDateString()); + testoFirma = $"{testoFirma} {dataFoto.ToShortDateString()} {dataFoto.ToLongDateString()}"; + testoFirmaV = $"{testoFirmaV} {dataFoto.ToShortDateString()} {dataFoto.ToLongDateString()}"; + //testoFirma = string.Concat(testoFirma, " ", dataFoto.ToShortDateString(), " ", dataFoto.ToLongDateString()); + //testoFirmaV = string.Concat(testoFirmaV, " ", dataFoto.ToShortDateString(), " ", dataFoto.ToLongDateString()); } - if (CatalogVbLib.PicSettings.UsaTempoGaraTestoApplicare) + if (_picSettings.UsaTempoGaraTestoApplicare) { - TimeSpan orario = dataPartenzaI - dataFoto; - testoFirma = string.Concat(testoFirma, " ", testoOrario, orario.ToString(@"hh\:mm\:ss")); - testoFirmaV = string.Concat(testoFirmaV, " ", testoOrario, orario.ToString(@"hh\:mm\:ss")); + //TimeSpan orario = dataPartenzaI - dataFoto; + + string orarioString = (dataPartenzaI - dataFoto).ToString(@"hh\:mm\:ss"); + + testoFirma = $"{testoFirma} {testoOrario} {orarioString}"; + testoFirmaV = $"{testoFirmaV} {testoOrario} {orarioString}"; + + //testoFirma = string.Concat(testoFirma, " ", testoOrario, orario.ToString(@"hh\:mm\:ss")); + //testoFirmaV = string.Concat(testoFirmaV, " ", testoOrario, orario.ToString(@"hh\:mm\:ss")); } } } } else { - testoFirma = CatalogVbLib.PicSettings.TestoFirmaStart; - testoFirmaV = CatalogVbLib.PicSettings.TestoFirmaStartV; + testoFirma = _picSettings.TestoFirmaStart; + testoFirmaV = _picSettings.TestoFirmaStartV; } } - + /// + /// Preparazione delle variabili a valori di default e caricamento da impostazioni + /// private void PreparaVariabili() { - alphaScelta = (int)(255 * (100 - CatalogVbLib.PicSettings.Trasparenza) / 100); + alphaScelta = (int)(255 * (100 - _picSettings.Trasparenza) / 100); testoFirma = string.Empty; testoFirmaV = string.Empty; - dataPartenzaI = CatalogVbLib.PicSettings.DataPartenza; - testoOrario = CatalogVbLib.PicSettings.TestoOrario; + dataPartenzaI = _picSettings.DataPartenza; + testoOrario = _picSettings.TestoOrario; if (testoOrario.Length > 0) { testoOrario += " "; @@ -241,10 +289,10 @@ namespace CatalogLib nomeFileSmall = string.Empty; nomeFileBig2 = string.Empty; nomeFileBig = string.Empty; - _dimensioneStandard = CatalogVbLib.PicSettings.DimStandard; - _dimensioneStandardMiniatura = CatalogVbLib.PicSettings.DimStandardMiniatura; + _dimensioneStandard = _picSettings.DimStandard; + _dimensioneStandardMiniatura = _picSettings.DimStandardMiniatura; - nomeFileSmall = CatalogVbLib.PicSettings.Suffisso + WorkFile.Name; + nomeFileSmall = _picSettings.Suffisso + WorkFile.Name; nomeFileBig = WorkFile.Name; } @@ -253,27 +301,28 @@ namespace CatalogLib if (g.Width > g.Height) { thumbSizeSmall = NewthumbSize(g.Width, g.Height, CatalogVbLib.PicSettings.LarghezzaSmall, "Larghezza"); - Size sizeOrig = new Size(g.Width, g.Height); - thumbSizeBig = sizeOrig; + //Size sizeOrig = new Size(g.Width, g.Height); + //thumbSizeBig = sizeOrig; + + thumbSizeBig = new Size(g.Width, g.Height); } else { thumbSizeSmall = NewthumbSize(g.Width, g.Height, CatalogVbLib.PicSettings.AltezzaSmall, "Altezza"); - Size sizeOrig = new Size(g.Width, g.Height); - thumbSizeBig = sizeOrig; + + thumbSizeBig = new Size(g.Width, g.Height); } } private void CreaMiniature(Image g, Bitmap imgOutputBig, ImageFormat thisFormat) { - CatalogLib.PicSettings ps = new PicSettings(); +// CatalogLib.PicSettings ps = new PicSettings(); - if (CatalogVbLib.PicSettings.TestoMin) + if (_picSettings.TestoMin) { testoFirmaPiccola = nomeFileBig; - } - else if (CatalogVbLib.PicSettings.AggNumTempMin) + else if (_picSettings.AggNumTempMin) { testoFirmaPiccola = nomeFileBig + " "; } @@ -283,20 +332,20 @@ namespace CatalogLib SizeF crSize1 = new SizeF(); SizeF crSize2 = new SizeF(); - if (CatalogVbLib.PicSettings.CreaMiniature) + if (_picSettings.CreaMiniature) { - if (!CatalogVbLib.PicSettings.AggiungiScritteMiniature) + if (!_picSettings.AggiungiScritteMiniature) { - if (string.Equals(CatalogVbLib.PicSettings.DirectorySorgente, CatalogVbLib.PicSettings.DirectoryDestinazione, StringComparison.CurrentCultureIgnoreCase)) + if (string.Equals(_picSettings.DirectorySorgente, _picSettings.DirectoryDestinazione, StringComparison.CurrentCultureIgnoreCase)) { - nomeFileSmall = nomeFileSmall.Substring(0, nomeFileSmall.Length - 4) + CatalogVbLib.PicSettings.Codice + + nomeFileSmall = nomeFileSmall.Substring(0, nomeFileSmall.Length - 4) + _picSettings.Codice + nomeFileSmall.Substring(nomeFileSmall.Length - 4); } - if (CatalogVbLib.PicSettings.UsaOrarioMiniatura || - CatalogVbLib.PicSettings.TestoMin || - CatalogVbLib.PicSettings.AggTempoGaraMin || - CatalogVbLib.PicSettings.AggNumTempMin) + if (_picSettings.UsaOrarioMiniatura || + _picSettings.TestoMin || + _picSettings.AggTempoGaraMin || + _picSettings.AggNumTempMin) { if (!string.IsNullOrWhiteSpace(testoFirmaPiccola)) { @@ -308,9 +357,9 @@ namespace CatalogLib int larghezzaStandard1; _dimensioneStandardMiniatura = 50; - bool grassetto = CatalogVbLib.PicSettings.Grassetto; - crFont1 = new Font(CatalogVbLib.PicSettings.IlFont, _dimensioneStandardMiniatura, grassetto ? FontStyle.Bold : FontStyle.Regular); - crFont2 = new Font(CatalogVbLib.PicSettings.IlFont, _dimensioneStandard, grassetto ? FontStyle.Bold : FontStyle.Regular); + bool grassetto = _picSettings.Grassetto; + crFont1 = new Font(_picSettings.IlFont, _dimensioneStandardMiniatura, grassetto ? FontStyle.Bold : FontStyle.Regular); + crFont2 = new Font(_picSettings.IlFont, _dimensioneStandard, grassetto ? FontStyle.Bold : FontStyle.Regular); crSize1 = grPhoto1.MeasureString(testoFirmaPiccola, crFont1); crSize2 = grPhoto1.MeasureString(testoFirma, crFont1); @@ -331,7 +380,7 @@ namespace CatalogLib conta -= 1; } - crFont1 = new Font(CatalogVbLib.PicSettings.IlFont, conta, grassetto ? FontStyle.Bold : FontStyle.Regular); + crFont1 = new Font(_picSettings.IlFont, conta, grassetto ? FontStyle.Bold : FontStyle.Regular); crSize1 = grPhoto1.MeasureString(testoFirmaPiccola, crFont1); if (crSize1.Width < g.Width) @@ -345,11 +394,11 @@ namespace CatalogLib } - switch (CatalogVbLib.PicSettings.Posizione.ToUpper()) + switch (_picSettings.Posizione.ToUpper()) { case "ALTO": - yPosFromBottom1 = CatalogVbLib.PicSettings.Margine; - yPosFromBottom4 = CatalogVbLib.PicSettings.MargVert; + yPosFromBottom1 = _picSettings.Margine; + yPosFromBottom4 = _picSettings.MargVert; break; case "BASSO": @@ -365,7 +414,7 @@ namespace CatalogLib StringFormat strFormat1 = new StringFormat(); - switch (CatalogVbLib.PicSettings.Allineamento.ToUpper()) + switch (_picSettings.Allineamento.ToUpper()) { case "SINISTRA": xCenterOfImg1 = CatalogVbLib.PicSettings.Margine + (larghezzaStandard1 / 2); @@ -396,21 +445,21 @@ namespace CatalogLib _dimensioneStandardMiniatura = CatalogVbLib.PicSettings.DimMin; - if (ps.Grassetto) + if (_picSettings.Grassetto) { - crFont1 = new Font(ps.IlFont, _dimensioneStandardMiniatura, FontStyle.Bold); + crFont1 = new Font(_picSettings.IlFont, _dimensioneStandardMiniatura, FontStyle.Bold); } else { - crFont1 = new Font(ps.IlFont, _dimensioneStandardMiniatura); + crFont1 = new Font(_picSettings.IlFont, _dimensioneStandardMiniatura); } - if (ps.TestoMin) + if (_picSettings.TestoMin) { grPhoto1.DrawString(nomeFileBig, crFont1, semiTransBrush21, new PointF(xCenterOfImg1 + 1, yPosFromBottom1 + 1), strFormat1); grPhoto1.DrawString(nomeFileBig, crFont1, semiTransBrush1, new PointF(xCenterOfImg1, yPosFromBottom1), strFormat1); } - else if (ps.AggTempoGaraMin & ps.UsaTempoGaraTestoApplicare) + else if (_picSettings.AggTempoGaraMin & _picSettings.UsaTempoGaraTestoApplicare) { //TimeSpan orario = (dataPartenzaI - dataFoto) * 10000000; //todo TimeSpan orario = dataPartenzaI - dataFoto; //todo controllare se torna la roba giusta @@ -425,7 +474,7 @@ namespace CatalogLib grPhoto1.DrawString(tempStr, crFont1, semiTransBrush21, new PointF(xCenterOfImg1 + 1, yPosFromBottom1 + 1)); grPhoto1.DrawString(tempStr, crFont1, semiTransBrush1, new PointF(xCenterOfImg1, yPosFromBottom1), strFormat1); } - else if (ps.AggNumTempMin) //todo semplificare la logica di sti eif + else if (_picSettings.AggNumTempMin) //todo semplificare la logica di sti eif { TimeSpan orario = dataPartenzaI - dataFoto; //todo controllare se torna la roba giusta string tempStr = ""; @@ -443,7 +492,7 @@ namespace CatalogLib //Salva miniatura - + imgOutputSmall.Save(Path.Combine(DestDir.FullName, "Temp_" + nomeFileSmall), thisFormat); float width = 0; float height = 0; diff --git a/CatalogLib/PicSettings.cs b/CatalogLib/PicSettings.cs index c490bdf..05afee6 100644 --- a/CatalogLib/PicSettings.cs +++ b/CatalogLib/PicSettings.cs @@ -146,12 +146,25 @@ namespace CatalogLib get { return 0; } } - public bool Posizione + public string Posizione { - get { return null; } + get { return string.Empty; } } - - + public bool UsaRotazioneAutomatica { get; set; } + public DateTime DataPartenza { get; set; } + public string TestoOrario { get; internal set; } + public int DimStandard { get; internal set; } + public int DimStandardMiniatura { get; internal set; } + public bool UsaOrarioTestoApplicare { get; set; } + public bool UsaOrarioMiniatura { get; set; } + public string TestoFirmaStart { get; set; } + public string TestoFirmaStartV { get; set; } + public bool UsaForzaJpg { get; set; } + public string DirectorySorgente { get; set; } + public string DirectoryDestinazione { get; set; } + public float Margine { get; set; } + public float MargVert { get; set; } + public string Allineamento { get; set; } } } diff --git a/CatalogLib/SinglePicData.cs b/CatalogLib/SinglePicData.cs new file mode 100644 index 0000000..fb392c5 --- /dev/null +++ b/CatalogLib/SinglePicData.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CatalogLib +{ + public enum Rotazione + { + Normale, + Destra, + Sinistra, + Sottosopra + } + + public class SinglePicData + { + + + } +}