From 3b1afdf2c0a7fff67cf9d2914fa765f2094b5d10 Mon Sep 17 00:00:00 2001 From: Maddo Date: Mon, 4 Jul 2016 16:45:45 +0200 Subject: [PATCH] ayy lmao --- Catalog.sln.ide/edb.chk | Bin 0 -> 8192 bytes Catalog.sln.ide/edbres00001.jrs | Bin 0 -> 2097152 bytes Catalog.sln.ide/edbres00002.jrs | Bin 0 -> 2097152 bytes Catalog.sln.ide/storage.ide | Bin 0 -> 2113536 bytes CatalogLib/CatalogLib.csproj | 66 + CatalogLib/Class1.cs | 12 + CatalogLib/ImageCreator.cs | 569 ++++ CatalogLib/PicSettings.cs | 157 + CatalogLib/Properties/AssemblyInfo.cs | 38 + CatalogLibVb/CatalogLibVb.csproj | 57 + CatalogLibVb/Class1.cs | 12 + CatalogLibVb/Properties/AssemblyInfo.cs | 36 + CatalogVbLib/CatalogVbLib.vbproj | 118 + CatalogVbLib/Class1.vb | 3 + CatalogVbLib/ExifReader.vb | 1068 ++++++ .../My Project/Application.Designer.vb | 13 + CatalogVbLib/My Project/Application.myapp | 10 + CatalogVbLib/My Project/AssemblyInfo.vb | 35 + CatalogVbLib/My Project/Resources.Designer.vb | 62 + CatalogVbLib/My Project/Resources.resx | 117 + CatalogVbLib/My Project/Settings.Designer.vb | 73 + CatalogVbLib/My Project/Settings.settings | 7 + CatalogVbLib/PicSettings.vb | 606 ++++ ImageCatalogCS/AboutForm.Designer.cs | 101 + ImageCatalogCS/AboutForm.cs | 25 + ImageCatalogCS/AboutForm.resx | 229 ++ ImageCatalogCS/App.config | 6 + ImageCatalogCS/CreaImmagineSeparateThread.cs | 12 + ImageCatalogCS/ExifReader.cs | 1166 +++++++ ImageCatalogCS/FileHelper.cs | 173 + ImageCatalogCS/ImageCatalog 3.csproj | 110 + ImageCatalogCS/ImageCreator.cs | 1057 ++++++ ImageCatalogCS/MainForm.Designer.cs | 1794 ++++++++++ ImageCatalogCS/MainForm.cs | 548 +++ ImageCatalogCS/MainForm.resx | 123 + ImageCatalogCS/PicSettings.cs | 92 + ImageCatalogCS/Program.cs | 22 + ImageCatalogCS/Properties/AssemblyInfo.cs | 36 + .../Properties/Resources.Designer.cs | 71 + ImageCatalogCS/Properties/Resources.resx | 117 + .../Properties/Settings.Designer.cs | 30 + ImageCatalogCS/Properties/Settings.settings | 7 + ImageCatalogCS/Temperature.cs | 32 + ImageCatalogCS/XMLSettings.cs | 208 ++ ImageCatalogCS/XYThreadPool.cs | 251 ++ WPFCatalog/App.config | 6 + WPFCatalog/App.xaml | 5 + WPFCatalog/App.xaml.cs | 17 + WPFCatalog/Icons/camera-photo-5.png | Bin 0 -> 1231 bytes WPFCatalog/Icons/document-open-6.png | Bin 0 -> 1028 bytes WPFCatalog/Icons/face-smile-2.png | Bin 0 -> 1235 bytes WPFCatalog/Icons/format-justify-left-2.png | Bin 0 -> 3517 bytes WPFCatalog/Icons/photo.png | Bin 0 -> 1059 bytes WPFCatalog/Icons/picture.png | Bin 0 -> 1075 bytes WPFCatalog/MainWindow.xaml | 424 +++ WPFCatalog/MainWindow.xaml.cs | 40 + WPFCatalog/MainWindowViewModel.cs | 493 +++ WPFCatalog/Properties/AssemblyInfo.cs | 55 + WPFCatalog/Properties/Resources.Designer.cs | 71 + WPFCatalog/Properties/Resources.resx | 117 + WPFCatalog/Properties/Settings.Designer.cs | 30 + WPFCatalog/Properties/Settings.settings | 7 + WPFCatalog/ViewModel/MainViewModel.cs | 37 + WPFCatalog/ViewModel/ViewModelLocator.cs | 63 + WPFCatalog/ViewModelBase.cs | 127 + WPFCatalog/WPFCatalog.csproj | 178 + WPFCatalog/packages.config | 7 + imagecatalog/AssemblyInfo.vb | 31 + imagecatalog/ClassDiagram1.cd | 1 + imagecatalog/CreaImmagineSeparateMultiCore.vb | 943 ++++++ imagecatalog/CreaImmagineSeparateThread.vb | 1409 ++++++++ imagecatalog/ExifReader.vb | 1068 ++++++ imagecatalog/FileHelper.vb | 143 + imagecatalog/Form1.resx | 120 + imagecatalog/Form1.vb | 2945 +++++++++++++++++ imagecatalog/ImageCatalog 2.vbproj | 297 ++ imagecatalog/ImageCreator.vb | 835 +++++ imagecatalog/LoadBuffer.vb | 9 + imagecatalog/MainForm.Designer.vb | 1786 ++++++++++ imagecatalog/MainForm.resx | 120 + imagecatalog/MainForm.vb | 1328 ++++++++ imagecatalog/Module1.vb | 155 + imagecatalog/Module2.vb | 3 + .../My Project/Application.Designer.vb | 38 + imagecatalog/My Project/Application.myapp | 10 + imagecatalog/My Project/Settings.Designer.vb | 73 + imagecatalog/My Project/Settings.settings | 6 + imagecatalog/My Project/app.manifest | 22 + imagecatalog/ParametriSetup.vb | 148 + imagecatalog/PicSettings.vb | 604 ++++ imagecatalog/XYThreadPool.vb | 185 ++ imagecatalog/app.config | 23 + 92 files changed, 23248 insertions(+) create mode 100644 Catalog.sln.ide/edb.chk create mode 100644 Catalog.sln.ide/edbres00001.jrs create mode 100644 Catalog.sln.ide/edbres00002.jrs create mode 100644 Catalog.sln.ide/storage.ide create mode 100644 CatalogLib/CatalogLib.csproj create mode 100644 CatalogLib/Class1.cs create mode 100644 CatalogLib/ImageCreator.cs create mode 100644 CatalogLib/PicSettings.cs create mode 100644 CatalogLib/Properties/AssemblyInfo.cs create mode 100644 CatalogLibVb/CatalogLibVb.csproj create mode 100644 CatalogLibVb/Class1.cs create mode 100644 CatalogLibVb/Properties/AssemblyInfo.cs create mode 100644 CatalogVbLib/CatalogVbLib.vbproj create mode 100644 CatalogVbLib/Class1.vb create mode 100644 CatalogVbLib/ExifReader.vb create mode 100644 CatalogVbLib/My Project/Application.Designer.vb create mode 100644 CatalogVbLib/My Project/Application.myapp create mode 100644 CatalogVbLib/My Project/AssemblyInfo.vb create mode 100644 CatalogVbLib/My Project/Resources.Designer.vb create mode 100644 CatalogVbLib/My Project/Resources.resx create mode 100644 CatalogVbLib/My Project/Settings.Designer.vb create mode 100644 CatalogVbLib/My Project/Settings.settings create mode 100644 CatalogVbLib/PicSettings.vb create mode 100644 ImageCatalogCS/AboutForm.Designer.cs create mode 100644 ImageCatalogCS/AboutForm.cs create mode 100644 ImageCatalogCS/AboutForm.resx create mode 100644 ImageCatalogCS/App.config create mode 100644 ImageCatalogCS/CreaImmagineSeparateThread.cs create mode 100644 ImageCatalogCS/ExifReader.cs create mode 100644 ImageCatalogCS/FileHelper.cs create mode 100644 ImageCatalogCS/ImageCatalog 3.csproj create mode 100644 ImageCatalogCS/ImageCreator.cs create mode 100644 ImageCatalogCS/MainForm.Designer.cs create mode 100644 ImageCatalogCS/MainForm.cs create mode 100644 ImageCatalogCS/MainForm.resx create mode 100644 ImageCatalogCS/PicSettings.cs create mode 100644 ImageCatalogCS/Program.cs create mode 100644 ImageCatalogCS/Properties/AssemblyInfo.cs create mode 100644 ImageCatalogCS/Properties/Resources.Designer.cs create mode 100644 ImageCatalogCS/Properties/Resources.resx create mode 100644 ImageCatalogCS/Properties/Settings.Designer.cs create mode 100644 ImageCatalogCS/Properties/Settings.settings create mode 100644 ImageCatalogCS/Temperature.cs create mode 100644 ImageCatalogCS/XMLSettings.cs create mode 100644 ImageCatalogCS/XYThreadPool.cs create mode 100644 WPFCatalog/App.config create mode 100644 WPFCatalog/App.xaml create mode 100644 WPFCatalog/App.xaml.cs create mode 100644 WPFCatalog/Icons/camera-photo-5.png create mode 100644 WPFCatalog/Icons/document-open-6.png create mode 100644 WPFCatalog/Icons/face-smile-2.png create mode 100644 WPFCatalog/Icons/format-justify-left-2.png create mode 100644 WPFCatalog/Icons/photo.png create mode 100644 WPFCatalog/Icons/picture.png create mode 100644 WPFCatalog/MainWindow.xaml create mode 100644 WPFCatalog/MainWindow.xaml.cs create mode 100644 WPFCatalog/MainWindowViewModel.cs create mode 100644 WPFCatalog/Properties/AssemblyInfo.cs create mode 100644 WPFCatalog/Properties/Resources.Designer.cs create mode 100644 WPFCatalog/Properties/Resources.resx create mode 100644 WPFCatalog/Properties/Settings.Designer.cs create mode 100644 WPFCatalog/Properties/Settings.settings create mode 100644 WPFCatalog/ViewModel/MainViewModel.cs create mode 100644 WPFCatalog/ViewModel/ViewModelLocator.cs create mode 100644 WPFCatalog/ViewModelBase.cs create mode 100644 WPFCatalog/WPFCatalog.csproj create mode 100644 WPFCatalog/packages.config create mode 100644 imagecatalog/AssemblyInfo.vb create mode 100644 imagecatalog/ClassDiagram1.cd create mode 100644 imagecatalog/CreaImmagineSeparateMultiCore.vb create mode 100644 imagecatalog/CreaImmagineSeparateThread.vb create mode 100644 imagecatalog/ExifReader.vb create mode 100644 imagecatalog/FileHelper.vb create mode 100644 imagecatalog/Form1.resx create mode 100644 imagecatalog/Form1.vb create mode 100644 imagecatalog/ImageCatalog 2.vbproj create mode 100644 imagecatalog/ImageCreator.vb create mode 100644 imagecatalog/LoadBuffer.vb create mode 100644 imagecatalog/MainForm.Designer.vb create mode 100644 imagecatalog/MainForm.resx create mode 100644 imagecatalog/MainForm.vb create mode 100644 imagecatalog/Module1.vb create mode 100644 imagecatalog/Module2.vb create mode 100644 imagecatalog/My Project/Application.Designer.vb create mode 100644 imagecatalog/My Project/Application.myapp create mode 100644 imagecatalog/My Project/Settings.Designer.vb create mode 100644 imagecatalog/My Project/Settings.settings create mode 100644 imagecatalog/My Project/app.manifest create mode 100644 imagecatalog/ParametriSetup.vb create mode 100644 imagecatalog/PicSettings.vb create mode 100644 imagecatalog/XYThreadPool.vb create mode 100644 imagecatalog/app.config diff --git a/Catalog.sln.ide/edb.chk b/Catalog.sln.ide/edb.chk new file mode 100644 index 0000000000000000000000000000000000000000..d0a48d9e9800b74ca898acb0904b266e8953fa26 GIT binary patch literal 8192 zcmeH~ze>YU7{yPEgGh1e;+7XM^v`5RTM;@HN;};pB%!8Fdm+ii(OIZZ;NVMicJNVr zk$R{}p*j@`BAg4k_xp3tcgZg|!?%8Ue#CyS_H z!ysIkfeqap7!!KJ-s94$62Ne3pS`S^S}1+g;b{tc&Z9&G)r^{e5lGgTVwj zVq}~Rh6oU1L2Cd@%VEjf3dJrvMZ(o_PYMrXMjax?EWHj|Xmd6gv6jW0y0FyssVH_T ziy8NJx$7|Ivu?_Bd{&F7H1rEr$*7vquj18PX%ztx5CIVo0TB=Z5fA|p5P=gBSgZd( ko}~JJGE@Jr{{Q%2M+y-T0TB=Z5fA|p5CIVofxjd01v3cP82|tP literal 0 HcmV?d00001 diff --git a/Catalog.sln.ide/edbres00001.jrs b/Catalog.sln.ide/edbres00001.jrs new file mode 100644 index 0000000000000000000000000000000000000000..3301331bed0971ef2a52684ad73baa99ed523573 GIT binary patch literal 2097152 zcmeIuF#!Mo0K%a4Pi+hzh(KY$fB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj PFkrxd0RsjM82Anh0pI`u literal 0 HcmV?d00001 diff --git a/Catalog.sln.ide/edbres00002.jrs b/Catalog.sln.ide/edbres00002.jrs new file mode 100644 index 0000000000000000000000000000000000000000..3301331bed0971ef2a52684ad73baa99ed523573 GIT binary patch literal 2097152 zcmeIuF#!Mo0K%a4Pi+hzh(KY$fB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj PFkrxd0RsjM82Anh0pI`u literal 0 HcmV?d00001 diff --git a/Catalog.sln.ide/storage.ide b/Catalog.sln.ide/storage.ide new file mode 100644 index 0000000000000000000000000000000000000000..4569100b4a364278c1fdc2c66db3c123c1549037 GIT binary patch literal 2113536 zcmeFa2Vh*sb@zLAQFnnwVUe5XJ&p=@147|<=?ye>3{sco_MgXl=Sr%#pZ8x<7Zx+w`<;&;mk)Wjl_E| z;*bAY)l4D&yJPLbMd8eiRYvzql_$fYfZXbdZso^*!_nKD=hO54!+)B`E+jjW&dHU= zpU9}reExC23rmgf#~slR>Ho6x`XSx?xXh)>-~|F800JNY0w4eaAOHd&00JNY0w4ea zAOHd&00JNY0w4eaAOHd&00JN|O9JIs|DPqP*{fmwfA*}V(Zu@yG;k0E0w4eaAOHd& z00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaxdiTgIYif9ex2HL0%Y;^^<_jg z{B8cCi+tj&#>$^?jxJ6?00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l z00ck)1V8`;-Z}y`9QE(LGADFT=v_Z3wEq7xum3ON)&2%q|Ic~J&jj$Z0M1hZIe|C@ z0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X_zxiv;JOH{{{a3{~9Wy z5?=qG$LFFVM+qN9ReV&^nMwYQfHRX}{u_$1q#G{~009sH0T2KI5C8!X009sH0T2KI z5C8!X009sH0T2KI5C8!X009sH0T2Lz{}2MD{LTM4v_QZA|BHWHN-IJuLS4Le?|;eq zzx)0FDfa)Th4NIuTl4?}q6GmE009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI z5C8!X009sH0T9?{zyDv6Tuf#3e=dKm!1w>%_5UgM|EGl!tpB4ffdB}A00@8p2!H?x zfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@A zdlmENPgWD9t4>i1um2bExya-(fpR|P>(2kY?SJS@SKqO|?mcg7Yw7Rvgp)+!dG<7X zhQm8r`Dy$aY0Oy93Q#LA%K-J>8b>PWIc~ z+q3sTcYAA(7r;)6ed+7#X>Msd)YrT>=&GdJvuN*Z-s@&ie(!)v7kZ&RY}(h|+u7aH zoRh~gpO3!&W)G73c-I`yM{jp`zr^B6IFfQ-B>in&J)O<{ZTTSYUEmq@wzYKkwsyC- z_qFwVQg#*bDYdq>Hy`TkKiu4TD46B@=6W{!+m5w&wsy1zvwgo$<8X6tU)$cU<`&P0 zBYO8$-f2tsf!2=xj_w1^om?1)x()=Ly~kGwoh@C>J^7fUwVpRlQCD|gFk2OFT@0V; zKh)FN*4fe3k%RdGpO3?By?vY>&nc()y*1t`7h``;eS6SHjtjVRPjk!u*5>|Z&xn8i zf|h!xu2Nf1+kw`$11%kGfqaKTzI^w!^)&Z#v34Hz9I!us`_cNjuj4>4TcILfl&ZqT z+Sc3K*4lYEU)f*ZO+C$RI-!!qnu4O7X5F{1xwZR<7sSAdO!`?fuW_r4Rh-7Hr*7l6 zfllMrQwO#UavHaux+%1QPUF_oLXF$%IhobdoW^ZcoW`xEUahmCPUF_o{KjpyoW`xE zUgNf*PUF_oK;yOwPUF_o{KjpyoW^b39N$!Xkr8f@HF!)e@l8f@HF z!)e@lIz{8Qs!rq9)11a_Rh-7Hr~bxm!=1*hr@4*W>Nt&CPyLPChC7X0PkoKs20M*g zPu+HF8@Hom8+TACw{cr#r*Z3PPUE&JPUAKzGWdAy)v7p++fymjxUI6kzUMSCKURPsPoUTSs-LA$4hE3nkr$uLadONzBdyiTFn!r+%i87l& zgU@u=D&!QF#ngmP!)LgfdM6w(Q27Fp1e*MW)nM7@d z+j2>s6o5DQtB5tqP3iHeJ5kcl61_>Ap1P&y1cu0f;ZrH~4j!kDYQ|I`e%+W&(dTPK z%;Y30Y3t+BUB-DYeJW-@QIiNh4SQ8c&m@JW?Df>+s z0{g8o#il=o=2QghKxg_+v1zyk8c=Zh0#)!57EmcN%|TUcO8Wd7A=+e5rzk+rvzKM| zr}eYO&2k~*eEnKe>}qbal&>|%6erh$;xo<^S3fhexh9C)ha04yIcVNncyWxVK>!3m z00ck)1V8`;KmY_l00ck)1ZE_#x#@pzyuRtu##K!VHq|vXY+T;-z{ZBAp^f!TEgLsC z{mX{BrYAP6Y5J`V4NdReu()ZIKezGU>o)CZ`rGxZnwD)?+Vti1bxkAdmoz=KzP{;a zS=L^$xar8I4NZ&IFKzn%y1J&{T(_j@>+4oFeR$pSraRXyZMuoiuV1&SX(69~du?6Q z@2y?Z^zpTen|^ie@}_sLZD=~m=U1)0s)^PvYudGTMbn?GscZW6HA|X4wx*%!?lnuB z-p+roU9*_JzPgTnb=7kEe^xG`Z7WvL=~b)f$jYU3#mWYHZbbtfT)mO9tC!KIS2fV4 z)%CP}Q~a)`c*Wa!?)Efp`T}+*Bct>*z!8MoBe#Velcb1meRk~ zt)$P@ucuAR*U*!78)-$uO1iv!1=ZBm5YhkrueH?1|8C~b{+F!v+wcDmUi62U&k{}% zc`9JW>Hq~0009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2Lz z9}@xl{r^u~?$~$u2Zw)9X#M~7W&Euc{{CH|_5UAJvfvg3KmY_l00ck)1V8`;KmY_l z00ck)1V8`;KmY_l00ck)1V8`;KmY_l00cnb4HA&=|9@iFj>Wf?-d6f0+1TIrD&fyZ zmlE}dD)RRKui!A=MfCF2JOA^Jx`EI_8;J8JrLIn)4S`MIRGaZ$o@y^#-i7n>bbHbA ze!Q3MMy=k~qrB^6NH#u|jbbmmTbO#`ykVt=SMmm&mwnrYdK$cKsA^R47V3TtyG^I3 z$=hYBX3ZNcE~tY52!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?x z{DcvxYr0gotm#X2S2g`y-IAtW{w;w`{5t?Oe5C4@Q+fS5T3263f2;fdfBRo*>D_eK z<>S1j?|;eq|BUmCnI3@|G%I2|No^QoC+0M|HuCS|H%ps$pHZn009sH0T2KI5C8!X z009sH0T2KI5C8!X009sH0T2KI5C8!X009sHfdT|%|Nn0s{LqCjJhij;Ghy%B|5f}^ zP9vp6jaLj)_#%;PjvqcV$^VH$WmHPKg?+euvQAY)`d-XNJ$&%%)p`7OnJTEO?{ud7 z_&XAV*-VT@k;w*C4U_!ffEdUjpZ|(KtShF;A4G}ulSBRS<0FYm4hnlVk}BDAK>h}7 zimCtfxM~-9+M-!7hA?#uiRWTZ*Xre^rkYw(BiYmA-RYj;u~d6&j~JGChO$wDH4Y>x zN`2$;!Nj3Vd{`4!>e(>Y!Zsz;J`x|!NEBtBdf8O!G3sIGneKFFYA|kKm3wC8Y$hp^ zLtZZ6a_UW`vJ#U-6!9z~tYz^AEGnrtF_=mZb)PtqNo2(;>RClu)e;C;MX9r;D?aXK zslv07pOC2K!`3=CZDq7Sak?v&(MTrCCYL$2Ws;R8qRV_(%#+1*AU>*a-{on(i!~%8 zqA4$NJy}A1*?3mL-s`E}%fZ&Es~V&J#OU})JezQ9;C-ISeXN(~y^>lJC*l($*~9UX z2~E%ap2huzEFzN4_K~5ER!!5pJ@t1NRzDn1_a%nA;)4SJJ)Zh|3aQWGIy*L$%qCM~ z@e!`R6Qg4q%>$m@1BL7=sDEO7B+;21O&V73^$gxy$e@f4C(;>?MpE^lr~F_cbms2McNlf?_aG=qe$PS{YlTeMPTx4-MV$5;v$;-_b`Pg*xrs7HYSEEhP^E^pYc`orhOP?w2 zPCQ3)Jy%f0r2Lz!y_7R_5J_*A=e(HB8HbKVMKTsi?-kPbD;)p)=T*~SYyD$U-^ut; z>JG==jB3(5nchzrO77*5&u;JJADaBOIz$;;gLldy%5SAZm9didf-%Za<+srx%h*`` zyj125S$+pPbQuS;8oKz0-&}_@V?K)^&2Ongo3WHCU_S8& zez`>&9NPTWI>Z^9Sq*W1TOI0*?aV`+-*8eo17kSJ$+V-Bt%Z|j$n#t1&}S^(#TI#k zlQZ=BO>_t}CbJm={iZq;8q@m<#TFb2{gyf;8q50&S^9=VznKn=#%!jc(Ql?hq%oWI z5b3wqq0-pTJXHD(b;vY^(+`<`BON-8(X>OS&&G_P#zs1+8AedQr4FRV@(m26eh)gH z8V@s$r+zyfR*l_^!>Zp-M^|I_21ZxE2OVUMhZzT1$4RcY z2a<(&Gn-bpIU_@_cdrtJcD9wOKdZLme;xxzEUlv(#g`vC?$2?FJiw3&fGG` z!z2g!J7!UxERt&g$3W4Q2|7t=Q6P&~H|3yjZl@@Yjj5i-Mj%%jRptFGJDBu_Ft*T) zmrKUQqDbFu>hcf%Jwg!NHrEKy$5xy}Y z|6&xIlz;PSr2=tcp-@%0l;jZ0e>if>QhM<#RPo%OFD(#z)L|YK<}!fu)iS>~@)2Yn z;|rpZ3AsvhxwEauU95uKO}gDWD@7(1$gwiyjg=(SKP0d#=@_)4Iwp!fD(J{n7xIwd!T+}yLNmwPdtCii95T5@9zbslaE{f*Ye zR?dyqtA37^!Dg&x!p0_wtwOMgNl_qkdD!OC+)4Sj*rv95Y$yOw@>rk_xxY6l5Tyl$ z^t~?+VvJf-gA=2PF^?kKdKATWwiK&zuV{>=3>CJ!aQRmT_&ZjH zzpYHox4# z&2}TTE+wbM6fA7_r$eQ%<>qTh-v{|qu*FpK#UPh-@_d&O;T-AZaK`+{Ay zV`IoWw|m)0fXYkkwX2T$B9wAwJLOO%9K^0DkkUN-v+c00-)iZwjo)haKE#I*D9~Y7 zQ}v|$^BUNCUs~Txx9$EctCT_w#~RZ2jFSfb;|!GxeG$oYBhZ1f7q2wL%WNB;HPpsu z3}@N+tfe+SV>xBx%PmlDPsMUOX|Bvwr1*4j%*rlZen zq1Dgqp}&55J3aICZkl-dC@pzV4uGTJpp$`m4vA=)&VWXq1obkME}MU%HlFyVOYUzqFNZxwMNKE?q}| zbMXecba6MOF5XC+FYci4Ja!#@`mtuZ`>}1b@3HMPhtI$EXcK+#(OYTPqc_plA2~`7 zJhFujKXNTC=D**(u!TNx;aa-qLL=?Juz{9c*hv5U@D_UQ;hps0!&lQye5`+XD}CpD zBYpn-diu!ub#&YLE!1>=8&#g)PG38>l`fp)G@iSfZaBA%qUUzeSI=&sN6v1dJI*#z z>)9O?J1bMz*E^Ob-|_8Vj($^yd47pZUNZOCzm({7sKj0WcP1JkRgwvSnQX`mL8b!! z*JMN&tz>GHao3h=WY#D)MS+=B-mGy2t(cU5n+s3cy*aRZ8EVp-H+6SouJvM;Rp%@p zJ$&TN+ZWQpN%^;|K+J*2a;_2Fh~{_^&EW_priy6x7YOVDFAx9$5C8!X009sH0T2KI z5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X@DsS1mYz$}OK0z*Yxy|n{n2fgJMi!C&!*b;UIKgDA0na;QIkd?ZmRo;@3hL{es=^w|_s z|LJknF7mWRvtSHi>KGEw#h$L!%S%l)wWLO}r^ma~J;P(E_SPOTEb$CWrivs=edF=L z#Gy=lSQA$2*)Z3_2`i!Yk@#>%qA2s!%cfF~Q4c%Mbf-I0gK-0^+%qd@GXZO#>~H~> zQ*SDjm6#-=h-V?&Ias{>(JPWl>P-x$(nH-RPGk~Uv5ImJcaNdAVsTqy34~U8#&lGFdjc%&9GttRxX#=EK&O$znPXA62;T@-*MY8j=yw zl$W@kETO(^JgZ>u^;GZWVC&RXjZuGMbbKV9O}I7iKF{Pn*30u=Nv(+!@rjY_;rPge zrssao;{HMw5y@uz$WTYCrs>_D`nwCOAC9N{62o2bL4p4sPyIcG)aP)W9UDq!lc}-z z2v^^U(J_tY0nhG%LUt9@KQTU%=uD0#4XgKh2JbCoP)3In=?q6Bsd~^;ez1^oDfOk& z*^brf=FZqZ74N`0^|EwD;ziI0pNj}M+|jc4O(67oz!g-qsoCW-OH*id3@Fqz1x zY1lIj7c%9xni!9#xy(Bct3i=xP&9>sH12)Lv8;)q*fS_DWH8V423$`P>2zYK^RQ=H z;+d8dGUaBJlIAUSU3%Uk?Rlg3uhynfr0>%Hr03ltF!{A^-MUb55l#Mkn8K6tuZp`o z({fB7S`sR53MFWaHqs&LBiC=S=U046*CT#wbNv=m@ud8#(I)75o}{Tfmw29~&y;p2 zo+G)QE2v^p{>{~1${9L{q&LfRUd-lHR+v9? zD)WXczXKh*jDuMXU4B~~!i?=qLzv%8hcaU}+o8;Fu0xtJpT&^ox74A{SV|QzpZEj6 z+#(GQZGLMV;*8C#hB&{i4t2(M=Aq7SI4PZhF`VRN+R@3@!bvma`7LzlGZyb+i@d?f z8T$MtIs_V%*$jbxQymJ8>3xM_3l4>TOC1u8<^6>$eM6$(Oov8eHq+4PH`5`~n9X{K z^xNxDY3yenD*c8!WE#WihfKeb4xPqm+M&~DV@6P8Bc0R?BdFg}2U27C1_n~U2OUq1 zhZ)CHznu=N#%{)8)o-VxtFe0nqpRP84zk9>jDxIWr{ipqj9Ow>r0;fAd9&lJxGr@D ztWp`Uq#q6Gdp&;|;)7pbl();=_??TV{1oFLz>6MrD)o zuY$(Y$*L_Xa*> z@+GetJ}z_WWP0hAKihfi#KN$%6lCTgFTGy3QxwO>R8M0gkSmR<@_v>bOnO5YTWH41 zCF5dIr0+I$d5z4gGaW-6Ji)(HO0htlv3?^J53Y6m3jGy)NUm#J13`xTOXNkT~9TliBj`<2v_PRWfSH}`DnwyA9%8wvoFJQk=!l@7#8fha8~ zr0;!s5M$Ju8k`tSjCmB<)}tu4v!!Sam7+16l47|Vukg2)dPQR_WvH;-h0DJ(z~8Yl z{EgL2{MkhLR|S1p`s9ng^NR@jd{_^%}m)eRqAw&B%5FE z;AXp#T9=a3VhR>^l~dSNQrK1OC#3I#{3+OCs`+A&OFDTXnMk{hhONEg7VBVf7woDX z8$;gMNEQUByd*c;RY!dhN;$Kga;OpxVpkMMX&(OBcG%W$wRG6VZ#8=#;zI}&=&-A) zdQ$#*4Q#zHt#78==3lYZ`v^5s3N;*SNZ&I~8u*VhR4(*IB-4#R2k!h9E`{W7f_Mp* zhLDw)4xE85%o=LrGlsKleAZGMpRt^>@#PjMx2IycoitbGDpLH#G?(8G@geZ#B}twP zQ|Do)qgDNRqA&elG0BboRzC9dS%wz~fB*=9z)v!P>*zzT?50~^*+nZ}X{SGX`F^_T z<)ajSc_)4OrET=Vmu{e=FKwpZedX=+-52km`(A9Mo)@>%q8E45H(uC9kG*gmoqAz2 z6@C096}`|%UwM8zefarZ6o39&TJ`)*^xMxh(nHT}r@`m0qt(ydLzkXCN(Z0aO3R+z zM&Ej7C%y2@&2;pcEwuWXJ@nU4Z>MLT-c1uvAEhNvZ>4WN#ox!Z!X?ImoDz6)WsWV^Ti$XoyV@DPe0a7cR#j`_C28^?Z=}zkUr!%7zm9G@zlEC4Z==fd+v#iPw$g=joW^rk(+%ggQS{s{ z`s&#Y^vKywbjR67YCXGyVrOLv`-P6B$xYw>YV_}%naN_OqRI?n|5BpUp%MyTH0%G) zL?c9EC=&oP*^n86Oa=U}$%rmm$1!yOiRxt z>7}!G(Y5>>fLZ_dhvPE{fB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?x zfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=9 z00@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p z2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900{h~68K_A z)fdkG%h`YVTsTOelut{R5ZxD^M@1KjLVPZVeU;FeNun^FDQ0;kg+etH4$WhM2u0N> z6z3|ix+)Yo3al3NP?Doil&et03Ub&eN^=z?>2g?wvRs8S4wSQ zaTIJWqPYrDR*=JbsK`~Q;6OR7LS?Q(B?ro36=JyxF-O6sp(#3QKIzBGf*VCWz z@o7Fj%EvqTxQUNld|biDztz>#*Z6pek6+@Wmya!cWcaA5lcnA7ePZz!?ufnjpI`Ma z?z3Fh$FEvU^ee@Yg6sb~=*%YSqd_`JkpzuWoNl2=2aQpd5)?`Ehd7N;#@#p+QuIvL!Q-fma$cW-&A=69cCMj;(FT7T3f{`q3Zm>Cz0%GBMr-QJm3E{ zvgwy>O7d;$ZQ^a(ZPIPZ&EGAYER$}VY@2GEXq#p^mn7R1+XUP6+T_~Q$~j&j00JNY z0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&@RLK}Hv0VXcxXq%1pRAWhVJ8| zrfz}`F3<2Y0~tD1FYEu`N}k;F?eBd1J9p%KzgoWj{=_n(dj76`34j0Jd=1>N`#)#o z?izWos}IukSAUl7+H@-|+0;c} z+1O3*+ITaq+Bi(Vx#1vZEU<%V_C`OQI72)KK5}8E6bXv3<<}s zDr@BQL^#s-vFD$z+NTK;i^aZU3}Mb(#NYB*l?>$WGkO<<&gI&DFgBYtS{7} zRrNl%rA&q6pU$nMNusRRCrRaCxYlt{YWA>$QjkaFC`c2Db0YS=zb$p$|5 znR=GvplbRC66T_itQ_Pjv5%{@leQcu)o-6R6$h&xD+_b%+BDf&wCW*l%!ZI4ALnxa zz>Ha~8F~|uNVNBG%B5VTdTU=bV^p=OT(w#lT9&>9_UT33K zfctP4<^1cWEroluQ1fe%-^BtMjHVt>@>`qVc;WQrAziKX;idG-!-nqwE&OLzBmrKW5u>G%{xq420{p1I{ZkmDIDWyVy{Vvwe zTwfmL5pkbRd*mv{n^pSVY}h$tO*Rc>B{x@|`Q$X%jsF3K%0;%0i&6@9g%lbWSUrC# z;;y}j&sT8=&+lA_Qsh_hKbhL`z|8ORS0~QAx;6WTlAb^IOSP7v z<$e5D?u$IcGX$AZ1uyVcGP|u_MbM}l4^J8Od7X`2VAOJ5!&izt5y_KrWad(#&;Ybe zM&7~|qEL|((ro3bWba{^D~3Y3xQ6erOc7CDia8f{SjrD`TZzKiE?4D+Qsue0pk0dG z|GAJ4Cx`WpA7c&u5qA28YUs|^DM=J6N!wBjmDR4P%j$=jjqL7yLn*XXz*l};T7}Yk z?JZL}E}Y&se(iGIkFjF>2nUWr72|pt#0xi(yw=5|lguo0=esxDG^LBefZyo6{6?82 z6i#E|YEXE9X=-OTfq_l$Ez4b`2zM$|g%rL6-TYtSD$0M`V~<>4PnE}J9v)`8?a|Ud zt%JgM1E;=o9dFm@1pIergc#`b+c>f{%G1|b~ANK<=&WPIq#17Ub#Cl zwPE4(&8DIFQ@2lU*Syh4w6EuMzp;C%9llj0d;|dy0D&Jpfi_xJ(?WB%-%7u`3sx~y!N6S0t z#QH<@CuMDPaYGyZ(bWn1)AB>~_ZwR1z@|3(5^pvBZeGi;ElSYUD^Afbt+n!Gfk{)qxRJY>CU@ z^mYCI|H(i6c%3;g;S1W#j)O??-Mn8JAtuQ!FcCFQPA7i5vY^)*t6%jJL~|_bl&xKAi`NvPfJM zxh|3#;V_%Y_U&0dMmVxz{sDpxH>4#HQpek!Z=&0Id+~AJ0X@aPM<8yC#jQN{U{W@< z+oN=h`uT?r(i~-+)7`@^QXHvqDXvPym1Neqx{lRTteD~=N^zQG%XGFRqg>@?>DJd9c2a=j*c9Z45Nya>(E=_tOVknQ3%!Ij}(~@RZ{HThS zm4J^KBUM1^<1nW~(j~QPoX^vINH+cD=tWZ@(Nz2hqv>Jy*2tDHq-Jx;o%`WUj3n=HE?_qmISyVxw;$uDsT6w7%N|I$FP2)#5`iPNfCIBjQ_ z^2-4G_!!Zao%W@zTHI96!c8+*r3||m<;pX{jlouaFGV%tN_HWcsTy^$c^$V9)6k`p z$a2?U$Vq{Waoxyp8mG>DtwdG(rlV?R4C9;&=?J$qz~M~sW`#^q~&{sG+*4zciptmZbpAdOIEro^Ls8s z+B4q59fojfRYvmjG2RbN+``RN>cTinH}Q{7wDEbnHeqQBcW6IxitGs_#V_5Zpt_!0p_GT|g*S1`!P=JJbx8%0@j~D(kW4LbGd1-%(W6D4U(>9kh2m)8 zEF9&xRO{jjadE{gT*xn>$avAqnU?YjmeZBu=E_;P@sFscgUu>^kIo`-wa9gKT~5oB z!ABakjF-71+jPUtVsXpAKjbube>$X1*)hL`8}@YLej}ITAeXj(+`md(Uo}hDrXtCV zC9O?aI?P*?YKHSP!BQD{3->1yu~eWX65*0rMwnmr*3D9Jvvihj-rRU-qgp0W@$OHv zqMzd8eFsC44poMJnTgrU zZ?lbd@=RbOx9CRh>KggePL5$K>&T~e)@$bT7S@)~R@$Wv)Ru!C(SyyYs)tXtlYSw;R=JL}`8LjKJ;(F~YUH|ZXMjQVaRx=-4IB`3)f7r~Q zq>qq3V-NQS(vL`gvYqD-(r1W;^e|iWy@f+s+0LuL>m&o~W|@JhuL&)W_2O>*EZr4C zZ5?e8M;m78=qUd@S!aRSu64FioNb(?Gt;bwwZV`2NNo})n`Y_chcD`DxG)>J@ZwyQ zQiSrGX9@kyGAZiKEZd<4EPs#lrxW~lEC1WV^PV_c%7in{XI@cXEg86amKi8Km9juL zi>uA9t0O%BY3E_dKS{ZT3Q6-PCR@bSmKj``S@R~I-pNm~$xR5GlC5ICbq4bvzBGRH zgLR`MyzxyWJbz9hUA$c8+aCbz=b490-h#d1FjGtV$ZeAZY?~nghuK6fKDv0`C-dnM zp62As>_v>7CfmZfMxwZ8hA0XZPNAwZz!l8iw~_pA;yG6^N82U3?K4D|pL%nFCfCUM zVO~YsA`O7a>74Eqr#okGS_qJxm&|Ue`J*2;c1gl_y@`a|mYiF5 zyT#$|863XZ8PB!i{Ms3u7s6bqJoD?_b>jZI8Qd36yIiTx{+jA~iRk(nA}W-RH&$JK z^h3`LlJFa5NO*oj*~8tv+#vH>;f>4_Io zblnSs^oP&Ci;h133HsP`H_}f%x1Z+o@#SY5m_2rVsOR?2+5(Z!esppT4l4wqDpv z-+K5EeemIK+WYV*{n2?|-#X8~ntgs3{rkBi^ys-;spH($wCLP^`kk{!=+3iyX#3eM zRB~1ptgop3>3#2+fBKuh>3siRZidNAR(jX+P4Wkd_=nG(_5Wrukm*1(|1~$Zf)~1n z`SQDy=ljR`(rBs>vvM%bS7>$}evi1^<8%2|EE>)JUaeh%3v9-CU*b>Zb@`0*0e?UM1V8`; zKmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY{ZasslZj~57l00@8p z2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?x zfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=9 z00@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p z2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?x zfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=9 z00@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p z2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?x zfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=9 z00@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p z2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?x zfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=9 z00@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p z2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?x zfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900{i32xNX|tZuAytn@F6gB~mRbi*>D zU!f8zx=2*R=OL?dH&K+%OcE8z+oJH97!`5YB0j!Pq2i_z(KH&1U5&*7jj*e++11z_ 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

y+8JSsp?u{i+A2MUe+kIcwm{eyv9CPu*e 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 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 Y2oNAZfB*pk1PBlyK!5;&pN7DH0|z + + + + Debug + AnyCPU + {D27ACCF2-80FC-4DE8-AEB8-351FF076E6D5} + Library + Properties + CatalogLib + CatalogLib + v4.5 + 512 + SAK + SAK + SAK + SAK + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + {44465926-240d-473f-90b8-786ba4384406} + CatalogVbLib + + + + + \ No newline at end of file diff --git a/CatalogLib/Class1.cs b/CatalogLib/Class1.cs new file mode 100644 index 0000000..a63356c --- /dev/null +++ b/CatalogLib/Class1.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CatalogLib +{ + public class Class1 + { + } +} diff --git a/CatalogLib/ImageCreator.cs b/CatalogLib/ImageCreator.cs new file mode 100644 index 0000000..ba4f2f1 --- /dev/null +++ b/CatalogLib/ImageCreator.cs @@ -0,0 +1,569 @@ +using System; +using System.Collections.Generic; +using System.Drawing.Drawing2D; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Drawing; +using System.Drawing.Imaging; +using CatalogVbLib; + +namespace CatalogLib +{ + public class ImageCreator + { + + #region "dichiarazioni" + + + private bool FotoRuotaADestra = false; + + private bool FotoRuotaASinistra = false; + private string TempMinText = ""; + //Private crFont1 As Font + + private string _NomeFileChild; + private DirectoryInfo _SourceDir; + private DirectoryInfo _DestDirStart; + + private DirectoryInfo _DestDir; + + private FileInfo _workFile; + private string testoFirma; + private string testoFirmaV; + private int alphaScelta; + private int _dimensioneStandard; + private int _dimensioneStandardMiniatura; + private DateTime dataFoto; + private DateTime dataPartenzaI; + private string testoOrario; + private string testoFirmaPiccola; + private Size thumbSizeSmall; + private Size thumbSizeBig; + private string nomeFileSmall; + private string nomeFileBig; + + private string nomeFileBig2; + private float yPosFromBottom; + private float yPosFromBottom1; + private float yPosFromBottom2; + private float yPosFromBottom3; + private float yPosFromBottom4; + + public string NomeFileChild + { + get { return _NomeFileChild; } + set { _NomeFileChild = value; } + } + + public DirectoryInfo DestDirStart + { + get { return _DestDirStart; } + set { _DestDirStart = value; } + } + + public DirectoryInfo SourceDir + { + get { return _SourceDir; } + set { _SourceDir = value; } + } + + public DirectoryInfo DestDir + { + get { return _DestDir; } + set { _DestDir = value; } + } + + public FileInfo WorkFile + { + get { return _workFile; } + set { _workFile = value; } + } + + #endregion + + 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 StringDigitSubstitute CreaImmagineThread(string info) + { + + } + + public void CreaImmagineThread(string info) + { + + CatalogLib.PicSettings ps = new CatalogLib.PicSettings(); + + Image g = Image.FromFile(WorkFile.FullName); + + + + if (ps.CreaMiniature) + { + CreaMiniature(); + } + + + } + + + private void Rotation(ref System.Drawing.Image g) + { + FotoRuotaADestra = false; + FotoRuotaASinistra = false; + + if (CatalogVbLib.PicSettings.UsaRotazioneAutomatica == true) + { + // ci sono dati exif + if (g.PropertyIdList.Length > 0) + { + ExifReader DatiExif = new ExifReader((Bitmap)g); + + switch (DatiExif.Orientation) + { + case ExifReader.Orientations.BottomLeft: + + break; + case ExifReader.Orientations.BottomRight: + + break; + case ExifReader.Orientations.LeftTop: + + break; + case ExifReader.Orientations.LftBottom: + FotoRuotaASinistra = true; + break; + case ExifReader.Orientations.RightBottom: + + break; + case ExifReader.Orientations.RightTop: + + break; + case ExifReader.Orientations.TopLeft: + + break; + case ExifReader.Orientations.TopRight: + + break; + } + } + } + + if (FotoRuotaASinistra == true) + { + g.RotateFlip(RotateFlipType.Rotate270FlipNone); + } + if (FotoRuotaADestra == true) + { + g.RotateFlip(RotateFlipType.Rotate90FlipNone); + } + + } + + 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 (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; + + if (dataFoto.Year != 1) + { + testoFirmaPiccola = dataFoto.ToShortDateString(); + if (CatalogVbLib.PicSettings.UsaOrarioTestoApplicare) + { + testoFirma = string.Concat(testoFirma, " ", dataFoto.ToShortDateString(), " ", + dataFoto.ToLongDateString()); + testoFirmaV = string.Concat(testoFirmaV, " ", dataFoto.ToShortDateString(), " ", + dataFoto.ToLongDateString()); + + } + if (CatalogVbLib.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")); + } + } + } + } + else + { + testoFirma = CatalogVbLib.PicSettings.TestoFirmaStart; + testoFirmaV = CatalogVbLib.PicSettings.TestoFirmaStartV; + } + } + + + private void PreparaVariabili() + { + alphaScelta = (int)(255 * (100 - CatalogVbLib.PicSettings.Trasparenza) / 100); + testoFirma = string.Empty; + testoFirmaV = string.Empty; + dataPartenzaI = CatalogVbLib.PicSettings.DataPartenza; + testoOrario = CatalogVbLib.PicSettings.TestoOrario; + if (testoOrario.Length > 0) + { + testoOrario += " "; + } + testoFirmaPiccola = string.Empty; + thumbSizeSmall = new Size(); + thumbSizeBig = new Size(); + nomeFileSmall = string.Empty; + nomeFileBig2 = string.Empty; + nomeFileBig = string.Empty; + _dimensioneStandard = CatalogVbLib.PicSettings.DimStandard; + _dimensioneStandardMiniatura = CatalogVbLib.PicSettings.DimStandardMiniatura; + + nomeFileSmall = CatalogVbLib.PicSettings.Suffisso + WorkFile.Name; + nomeFileBig = WorkFile.Name; + } + + private void PrepareThumbnailSize(Image g) + { + 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; + } + else + { + thumbSizeSmall = NewthumbSize(g.Width, g.Height, CatalogVbLib.PicSettings.AltezzaSmall, "Altezza"); + Size sizeOrig = new Size(g.Width, g.Height); + thumbSizeBig = sizeOrig; + } + } + + private void CreaMiniature(Image g, Bitmap imgOutputBig, ImageFormat thisFormat) + { + CatalogLib.PicSettings ps = new PicSettings(); + + if (CatalogVbLib.PicSettings.TestoMin) + { + testoFirmaPiccola = nomeFileBig; + + } + else if (CatalogVbLib.PicSettings.AggNumTempMin) + { + testoFirmaPiccola = nomeFileBig + " "; + } + + Font crFont1; + Font crFont2; + SizeF crSize1 = new SizeF(); + SizeF crSize2 = new SizeF(); + + if (CatalogVbLib.PicSettings.CreaMiniature) + { + if (!CatalogVbLib.PicSettings.AggiungiScritteMiniature) + { + if (string.Equals(CatalogVbLib.PicSettings.DirectorySorgente, CatalogVbLib.PicSettings.DirectoryDestinazione, StringComparison.CurrentCultureIgnoreCase)) + { + nomeFileSmall = nomeFileSmall.Substring(0, nomeFileSmall.Length - 4) + CatalogVbLib.PicSettings.Codice + + nomeFileSmall.Substring(nomeFileSmall.Length - 4); + } + + if (CatalogVbLib.PicSettings.UsaOrarioMiniatura || + CatalogVbLib.PicSettings.TestoMin || + CatalogVbLib.PicSettings.AggTempoGaraMin || + CatalogVbLib.PicSettings.AggNumTempMin) + { + if (!string.IsNullOrWhiteSpace(testoFirmaPiccola)) + { + Bitmap imgOutputSmall = (Bitmap)imgOutputBig.Clone(); + + Graphics grPhoto1 = Graphics.FromImage(imgOutputSmall); + grPhoto1.SmoothingMode = SmoothingMode.HighSpeed; //Todo: permettere di cambiare questo parametro + + 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); + + crSize1 = grPhoto1.MeasureString(testoFirmaPiccola, crFont1); + crSize2 = grPhoto1.MeasureString(testoFirma, crFont1); + + larghezzaStandard1 = (int)crSize1.Width; + + if (crSize1.Width > g.Width) + { + int conta = _dimensioneStandardMiniatura; + do + { + if (conta > 20) + { + conta -= 5; + } + else + { + conta -= 1; + } + + crFont1 = new Font(CatalogVbLib.PicSettings.IlFont, conta, grassetto ? FontStyle.Bold : FontStyle.Regular); + crSize1 = grPhoto1.MeasureString(testoFirmaPiccola, crFont1); + + if (crSize1.Width < g.Width) + { + larghezzaStandard1 = (int)crSize1.Width; + break; + } + + } while (conta > 5); + _dimensioneStandardMiniatura = conta; + + } + + switch (CatalogVbLib.PicSettings.Posizione.ToUpper()) + { + case "ALTO": + yPosFromBottom1 = CatalogVbLib.PicSettings.Margine; + yPosFromBottom4 = CatalogVbLib.PicSettings.MargVert; + break; + + case "BASSO": + yPosFromBottom1 = + (float) + (g.Height - crSize1.Height - (g.Height * CatalogVbLib.PicSettings.Margine / 100)); + yPosFromBottom4 = (float)(g.Height - crSize1.Height - (g.Height * CatalogVbLib.PicSettings.MargVert / 100)); + break; + } + + + float xCenterOfImg1 = Single.NaN; + + StringFormat strFormat1 = new StringFormat(); + + switch (CatalogVbLib.PicSettings.Allineamento.ToUpper()) + { + case "SINISTRA": + xCenterOfImg1 = CatalogVbLib.PicSettings.Margine + (larghezzaStandard1 / 2); + if ((larghezzaStandard1 / 2) > (g.Width / 2) - CatalogVbLib.PicSettings.Margine) + { + xCenterOfImg1 = g.Width / 2; + } + break; + + case "CENTRO": + xCenterOfImg1 = (g.Width / 2); + break; + + case "DESTRA": + xCenterOfImg1 = (g.Width - CatalogVbLib.PicSettings.Margine - (larghezzaStandard1 / 2)); + if ((larghezzaStandard1 / 2) > (g.Width / 2) - CatalogVbLib.PicSettings.Margine) + { + xCenterOfImg1 = g.Width / 2; + } + break; + + } + + strFormat1.Alignment = StringAlignment.Center; + + SolidBrush semiTransBrush21 = new SolidBrush(Color.FromArgb(alphaScelta, 0, 0, 0)); + SolidBrush semiTransBrush1 = new SolidBrush(Color.FromArgb(alphaScelta, CatalogVbLib.PicSettings.fontColoreRGB)); + + _dimensioneStandardMiniatura = CatalogVbLib.PicSettings.DimMin; + + if (ps.Grassetto) + { + crFont1 = new Font(ps.IlFont, _dimensioneStandardMiniatura, FontStyle.Bold); + } + else + { + crFont1 = new Font(ps.IlFont, _dimensioneStandardMiniatura); + } + + if (ps.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) + { + //TimeSpan orario = (dataPartenzaI - dataFoto) * 10000000; //todo + TimeSpan orario = dataPartenzaI - dataFoto; //todo controllare se torna la roba giusta + + string tempStr = ""; + + + + tempStr += Environment.NewLine + testoOrario + orario.Hours.ToString("00") + ":" + + orario.Minutes.ToString("00") + ":" + orario.Seconds.ToString("00"); //todo: usare una stringa formato per sta boiata + + 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 + { + TimeSpan orario = dataPartenzaI - dataFoto; //todo controllare se torna la roba giusta + string tempStr = ""; + tempStr += nomeFileBig + Environment.NewLine + testoOrario + orario.Hours.ToString("00") + ":" + + orario.Minutes.ToString("00") + ":" + orario.Seconds.ToString("00"); //todo: usare una stringa formato per sta boiata + + grPhoto1.DrawString(tempStr, crFont1, semiTransBrush21, new PointF(xCenterOfImg1 + 1, yPosFromBottom1 + 1)); + grPhoto1.DrawString(tempStr, crFont1, semiTransBrush1, new PointF(xCenterOfImg1, yPosFromBottom1), strFormat1); + } + else + { + grPhoto1.DrawString(testoFirmaPiccola, crFont1, semiTransBrush21, new PointF(xCenterOfImg1 + 1, yPosFromBottom1 + 1), strFormat1); + grPhoto1.DrawString(testoFirmaPiccola, crFont1, semiTransBrush1, new PointF(xCenterOfImg1, yPosFromBottom1), strFormat1); + } + + + //Salva miniatura + + imgOutputSmall.Save(Path.Combine(DestDir.FullName, "Temp_" + nomeFileSmall), thisFormat); + float width = 0; + float height = 0; + //float scale = Math.Min(width/imgOutputSmall.Width, height/imgOutputSmall.Height); + using (var bmp = new Bitmap(thumbSizeSmall.Width, thumbSizeSmall.Height)) + { + using (var graph = Graphics.FromImage(bmp)) + { + // uncomment for higher quality output + //graph.InterpolationMode = InterpolationMode.High; + //graph.CompositingQuality = CompositingQuality.HighQuality; + //graph.SmoothingMode = SmoothingMode.AntiAlias; + + graph.DrawImage(imgOutputSmall, new Rectangle(0, 0, (int)width, (int)height)); + + bmp.Save(Path.Combine(DestDir.FullName, nomeFileSmall), thisFormat); + } + } + //var bmp = new Bitmap(thumbSizeSmall.Width, thumbSizeSmall.Height); + //var graph = Graphics.FromImage(bmp); + + + +// 10 down vote accepted + + +//Target parameters: + +//float width = 1024; +//float height = 768; +//var brush = new SolidBrush(Color.Black); + +//Your original file: + +//var image = new Bitmap(file); + +//Target sizing (scale factor): + +//float scale = Math.Min(width / image.Width, height / image.Height); + +//The resize including brushing canvas first: + +//var bmp = new Bitmap((int)width, (int)height); +//var graph = Graphics.FromImage(bmp); + +//// uncomment for higher quality output +////graph.InterpolationMode = InterpolationMode.High; +////graph.CompositingQuality = CompositingQuality.HighQuality; +////graph.SmoothingMode = SmoothingMode.AntiAlias; + +//var scaleWidth = (int)(image.Width * scale); +//var scaleHeight = (int)(image.Height * scale); + +//graph.FillRectangle(brush, new RectangleF(0, 0, width, height)); +//graph.DrawImage(image, new Rectangle(((int)width - scaleWidth)/2, ((int)height - scaleHeight)/2, scaleWidth, scaleHeight)); + + + + //imgOutputSmall.Save(Path.Combine(DestDir.FullName, nomeFileSmall), thisFormat); + + + //Image g2 = Image.FromFile(Path.Combine(DestDir.FullName, "Temp_" + nomeFileSmall)); + //Bitmap imgOutputSmall2 = new Bitmap(g2, thumbSizeSmall.Width, thumbSizeSmall.Height); + //imgOutputSmall2.Save(Path.Combine(DestDir.FullName, nomeFileSmall), thisFormat); + + + + } + } + + + } + } + + + + } + + + + ///

+ /// Calculate the Size of the New image + /// + /// Larghezza + /// Altezza + /// + /// + /// + /// + private Size NewthumbSize(int currentwidth, int currentheight, int MaxPixel, string TipoSize) + { + // e + //*** Larghezza, Altezza, Auto + + double tempMultiplier = 0; + + if (TipoSize.ToUpper() == "Larghezza".ToUpper()) + { + tempMultiplier = MaxPixel / currentwidth; + } + else if (TipoSize.ToUpper() == "Altezza".ToUpper()) + { + tempMultiplier = MaxPixel / currentheight; + } + else + { + // portrait + if (currentheight > currentwidth) + { + tempMultiplier = MaxPixel / currentheight; + } + else + { + tempMultiplier = MaxPixel / currentwidth; + } + } + + Size NewSize = new Size(Convert.ToInt32(currentwidth * tempMultiplier), Convert.ToInt32(currentheight * tempMultiplier)); + + return NewSize; + } + } +} diff --git a/CatalogLib/PicSettings.cs b/CatalogLib/PicSettings.cs new file mode 100644 index 0000000..c490bdf --- /dev/null +++ b/CatalogLib/PicSettings.cs @@ -0,0 +1,157 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CatalogLib +{ + public class PicSettings + { + //TODO: Singleton + + private Dictionary _settingsDict = new Dictionary(); + + + public PicSettings() + { + SetDefaults(); + } + + public void Set(string key, object value) + { + if (_settingsDict.ContainsKey(key)) + { + _settingsDict[key] = value; + } + else + { + _settingsDict.Add(key,value); + } + } + + public bool Exists(string key) + { + return _settingsDict.ContainsKey(key); + } + + public int GetInt(string key) + { + return _settingsDict.ContainsKey(key) ? (int) _settingsDict[key] : 0; + } + + public string GetString(string key) + { + return _settingsDict.ContainsKey(key) ? (string) _settingsDict[key] : string.Empty; + } + + public bool GetBool(string key) + { + return _settingsDict.ContainsKey(key) && (bool) _settingsDict[key]; + } + + public void SetBool(string key, bool value) + { + if (_settingsDict.ContainsKey(key)) + { + _settingsDict[key] = value; + } + else + { + _settingsDict.Add(key, value); + } + + } + + public object GetObject(string key) + { + return _settingsDict.ContainsKey(key) ? _settingsDict[key] : null; + } + + + + public void SetDefaults() + { + Set("dirSorgente",string.Empty); + Set("dirDestinazione",string.Empty); + Set("dirAggiornaSottodirectory", false); + Set("dirCreaSottoCartelle",false); + //Set(); + } + + public bool Grassetto + { + get { return GetBool("Grassetto"); } + set { SetBool("Grassetto", value);} + } + + public string IlFont //todo + { + get { return GetString(""); } + set { } + } + + public bool TestoMin //todo + { + get { return false; } + set { } + } + + public bool AggTempoGaraMin //todo + { + get { return false; } + set { } + } + + public bool UsaTempoGaraTestoApplicare //todo + { + get { return false; } + set { } + } + + public bool AggNumTempMin //todo + { + get { return false; } + set { } + } + + public bool CreaMiniature //todo + { + get { return false; } + set { } + } + + public bool AggiungiScritteMiniature + { + get { return false; } + set { } + } + + public string Suffisso + { + get { return string.Empty; } + set { } + } + + public string Codice + { + get { return null; } + set {} + } + + public int Trasparenza + { + get { return 0; } + } + + public bool Posizione + { + get { return null; } + } + + + + } +} diff --git a/CatalogLib/Properties/AssemblyInfo.cs b/CatalogLib/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..9d7f332 --- /dev/null +++ b/CatalogLib/Properties/AssemblyInfo.cs @@ -0,0 +1,38 @@ +using System; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("CatalogLib")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("CatalogLib")] +[assembly: AssemblyCopyright("Copyright © 2013")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("7bb8e6ce-72c8-4b36-a166-a62ed446d4e9")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: CLSCompliant(true)] \ No newline at end of file diff --git a/CatalogLibVb/CatalogLibVb.csproj b/CatalogLibVb/CatalogLibVb.csproj new file mode 100644 index 0000000..8d292d6 --- /dev/null +++ b/CatalogLibVb/CatalogLibVb.csproj @@ -0,0 +1,57 @@ + + + + + Debug + AnyCPU + {B3352D87-BF9F-4F7A-9162-007492DA76E4} + Library + Properties + CatalogLibVb + CatalogLibVb + v4.5 + 512 + SAK + SAK + SAK + SAK + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/CatalogLibVb/Class1.cs b/CatalogLibVb/Class1.cs new file mode 100644 index 0000000..16254ce --- /dev/null +++ b/CatalogLibVb/Class1.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CatalogLibVb +{ + public class Class1 + { + } +} diff --git a/CatalogLibVb/Properties/AssemblyInfo.cs b/CatalogLibVb/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..0ec915f --- /dev/null +++ b/CatalogLibVb/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// Le informazioni generali relative a un assembly sono controllate dal seguente +// set di attributi. Per modificare le informazioni associate a un assembly +// occorre quindi modificare i valori di questi attributi. +[assembly: AssemblyTitle("CatalogLibVb")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("CatalogLibVb")] +[assembly: AssemblyCopyright("Copyright © 2014")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Se si imposta ComVisible su false, i tipi in questo assembly non saranno visibili +// ai componenti COM. Se è necessario accedere a un tipo in questo assembly da +// COM, impostare su true l'attributo ComVisible per tale tipo. +[assembly: ComVisible(false)] + +// Se il progetto viene esposto a COM, il GUID che segue verrà utilizzato per creare l'ID della libreria dei tipi +[assembly: Guid("367f3879-584c-4780-8ad0-dc84d2e77928")] + +// Le informazioni sulla versione di un assembly sono costituite dai seguenti quattro valori: +// +// Numero di versione principale +// Numero di versione secondario +// Numero build +// Revisione +// +// È possibile specificare tutti i valori oppure impostare valori predefiniti per i numeri relativi alla revisione e alla build +// utilizzando l'asterisco (*) come descritto di seguito: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/CatalogVbLib/CatalogVbLib.vbproj b/CatalogVbLib/CatalogVbLib.vbproj new file mode 100644 index 0000000..638fdd4 --- /dev/null +++ b/CatalogVbLib/CatalogVbLib.vbproj @@ -0,0 +1,118 @@ + + + + + Debug + AnyCPU + {44465926-240D-473F-90B8-786BA4384406} + Library + CatalogVbLib + CatalogVbLib + 512 + Windows + v4.5 + SAK + SAK + SAK + SAK + + + true + full + true + true + bin\Debug\ + CatalogVbLib.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + CatalogVbLib.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + On + + + Binary + + + Off + + + On + + + + + + + + + + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/CatalogVbLib/Class1.vb b/CatalogVbLib/Class1.vb new file mode 100644 index 0000000..875798b --- /dev/null +++ b/CatalogVbLib/Class1.vb @@ -0,0 +1,3 @@ +Public Class Class1 + +End Class diff --git a/CatalogVbLib/ExifReader.vb b/CatalogVbLib/ExifReader.vb new file mode 100644 index 0000000..15a19bd --- /dev/null +++ b/CatalogVbLib/ExifReader.vb @@ -0,0 +1,1068 @@ +'''----------------------------------------------------------------------------- +''' +''' Utility class for reading EXIF data from images. Provides abstraction +''' for most common data and generic utilities for work with all other. +''' +''' +''' Copyright (c) Michal A. Valášek - Altair Communications, 2003 +''' Copmany: http://software.altaircom.net * support@altaircom.net +''' Private: http://www.rider.cz * developer@rider.cz +''' This is free software licensed under GNU Lesser General Public License +''' +''' +''' [altair] 10.9.2003 Created +''' +'''----------------------------------------------------------------------------- +Public Class ExifReader + Implements IDisposable + + Private Image As System.Drawing.Bitmap + + '''----------------------------------------------------------------------------- + ''' + ''' Contains possible values of EXIF tag names (ID) + ''' + ''' See GdiPlusImaging.h + ''' + ''' [altair] 10.9.2003 Created + ''' + '''----------------------------------------------------------------------------- + Public Enum TagNames + ExifIFD = &H8769 + GpsIFD = &H8825 + NewSubfileType = &HFE + SubfileType = &HFF + ImageWidth = &H100 + ImageHeight = &H101 + BitsPerSample = &H102 + Compression = &H103 + PhotometricInterp = &H106 + ThreshHolding = &H107 + CellWidth = &H108 + CellHeight = &H109 + FillOrder = &H10A + DocumentName = &H10D + ImageDescription = &H10E + EquipMake = &H10F + EquipModel = &H110 + StripOffsets = &H111 + Orientation = &H112 + SamplesPerPixel = &H115 + RowsPerStrip = &H116 + StripBytesCount = &H117 + MinSampleValue = &H118 + MaxSampleValue = &H119 + XResolution = &H11A + YResolution = &H11B + PlanarConfig = &H11C + PageName = &H11D + XPosition = &H11E + YPosition = &H11F + FreeOffset = &H120 + FreeByteCounts = &H121 + GrayResponseUnit = &H122 + GrayResponseCurve = &H123 + T4Option = &H124 + T6Option = &H125 + ResolutionUnit = &H128 + PageNumber = &H129 + TransferFuncition = &H12D + SoftwareUsed = &H131 + DateTime = &H132 + Artist = &H13B + HostComputer = &H13C + Predictor = &H13D + WhitePoint = &H13E + PrimaryChromaticities = &H13F + ColorMap = &H140 + HalftoneHints = &H141 + TileWidth = &H142 + TileLength = &H143 + TileOffset = &H144 + TileByteCounts = &H145 + InkSet = &H14C + InkNames = &H14D + NumberOfInks = &H14E + DotRange = &H150 + TargetPrinter = &H151 + ExtraSamples = &H152 + SampleFormat = &H153 + SMinSampleValue = &H154 + SMaxSampleValue = &H155 + TransferRange = &H156 + JPEGProc = &H200 + JPEGInterFormat = &H201 + JPEGInterLength = &H202 + JPEGRestartInterval = &H203 + JPEGLosslessPredictors = &H205 + JPEGPointTransforms = &H206 + JPEGQTables = &H207 + JPEGDCTables = &H208 + JPEGACTables = &H209 + YCbCrCoefficients = &H211 + YCbCrSubsampling = &H212 + YCbCrPositioning = &H213 + REFBlackWhite = &H214 + ICCProfile = &H8773 + Gamma = &H301 + ICCProfileDescriptor = &H302 + SRGBRenderingIntent = &H303 + ImageTitle = &H320 + Copyright = &H8298 + ResolutionXUnit = &H5001 + ResolutionYUnit = &H5002 + ResolutionXLengthUnit = &H5003 + ResolutionYLengthUnit = &H5004 + PrintFlags = &H5005 + PrintFlagsVersion = &H5006 + PrintFlagsCrop = &H5007 + PrintFlagsBleedWidth = &H5008 + PrintFlagsBleedWidthScale = &H5009 + HalftoneLPI = &H500A + HalftoneLPIUnit = &H500B + HalftoneDegree = &H500C + HalftoneShape = &H500D + HalftoneMisc = &H500E + HalftoneScreen = &H500F + JPEGQuality = &H5010 + GridSize = &H5011 + ThumbnailFormat = &H5012 + ThumbnailWidth = &H5013 + ThumbnailHeight = &H5014 + ThumbnailColorDepth = &H5015 + ThumbnailPlanes = &H5016 + ThumbnailRawBytes = &H5017 + ThumbnailSize = &H5018 + ThumbnailCompressedSize = &H5019 + ColorTransferFunction = &H501A + ThumbnailData = &H501B + ThumbnailImageWidth = &H5020 + ThumbnailImageHeight = &H502 + ThumbnailBitsPerSample = &H5022 + ThumbnailCompression = &H5023 + ThumbnailPhotometricInterp = &H5024 + ThumbnailImageDescription = &H5025 + ThumbnailEquipMake = &H5026 + ThumbnailEquipModel = &H5027 + ThumbnailStripOffsets = &H5028 + ThumbnailOrientation = &H5029 + ThumbnailSamplesPerPixel = &H502A + ThumbnailRowsPerStrip = &H502B + ThumbnailStripBytesCount = &H502C + ThumbnailResolutionX = &H502D + ThumbnailResolutionY = &H502E + ThumbnailPlanarConfig = &H502F + ThumbnailResolutionUnit = &H5030 + ThumbnailTransferFunction = &H5031 + ThumbnailSoftwareUsed = &H5032 + ThumbnailDateTime = &H5033 + ThumbnailArtist = &H5034 + ThumbnailWhitePoint = &H5035 + ThumbnailPrimaryChromaticities = &H5036 + ThumbnailYCbCrCoefficients = &H5037 + ThumbnailYCbCrSubsampling = &H5038 + ThumbnailYCbCrPositioning = &H5039 + ThumbnailRefBlackWhite = &H503A + ThumbnailCopyRight = &H503B + LuminanceTable = &H5090 + ChrominanceTable = &H5091 + FrameDelay = &H5100 + LoopCount = &H5101 + PixelUnit = &H5110 + PixelPerUnitX = &H5111 + PixelPerUnitY = &H5112 + PaletteHistogram = &H5113 + ExifExposureTime = &H829A + ExifFNumber = &H829D + ExifExposureProg = &H8822 + ExifSpectralSense = &H8824 + ExifISOSpeed = &H8827 + ExifOECF = &H8828 + ExifVer = &H9000 + ExifDTOrig = &H9003 + ExifDTDigitized = &H9004 + ExifCompConfig = &H9101 + ExifCompBPP = &H9102 + ExifShutterSpeed = &H9201 + ExifAperture = &H9202 + ExifBrightness = &H9203 + ExifExposureBias = &H9204 + ExifMaxAperture = &H9205 + ExifSubjectDist = &H9206 + ExifMeteringMode = &H9207 + ExifLightSource = &H9208 + ExifFlash = &H9209 + ExifFocalLength = &H920A + ExifMakerNote = &H927C + ExifUserComment = &H9286 + ExifDTSubsec = &H9290 + ExifDTOrigSS = &H9291 + ExifDTDigSS = &H9292 + ExifFPXVer = &HA000 + ExifColorSpace = &HA001 + ExifPixXDim = &HA002 + ExifPixYDim = &HA003 + ExifRelatedWav = &HA004 + ExifInterop = &HA005 + ExifFlashEnergy = &HA20B + ExifSpatialFR = &HA20C + ExifFocalXRes = &HA20E + ExifFocalYRes = &HA20F + ExifFocalResUnit = &HA210 + ExifSubjectLoc = &HA214 + ExifExposureIndex = &HA215 + ExifSensingMethod = &HA217 + ExifFileSource = &HA300 + ExifSceneType = &HA301 + ExifCfaPattern = &HA302 + GpsVer = &H0 + GpsLatitudeRef = &H1 + GpsLatitude = &H2 + GpsLongitudeRef = &H3 + GpsLongitude = &H4 + GpsAltitudeRef = &H5 + GpsAltitude = &H6 + GpsGpsTime = &H7 + GpsGpsSatellites = &H8 + GpsGpsStatus = &H9 + GpsGpsMeasureMode = &HA + GpsGpsDop = &HB + GpsSpeedRef = &HC + GpsSpeed = &HD + GpsTrackRef = &HE + GpsTrack = &HF + GpsImgDirRef = &H10 + GpsImgDir = &H11 + GpsMapDatum = &H12 + GpsDestLatRef = &H13 + GpsDestLat = &H14 + GpsDestLongRef = &H15 + GpsDestLong = &H16 + GpsDestBearRef = &H17 + GpsDestBear = &H18 + GpsDestDistRef = &H19 + GpsDestDist = &H1A + End Enum + + '''----------------------------------------------------------------------------- + ''' + ''' Real position of 0th row and column of picture + ''' + ''' + ''' + ''' [altair] 10.9.2003 Created + ''' + '''----------------------------------------------------------------------------- + Public Enum Orientations + TopLeft = 1 + TopRight = 2 + BottomRight = 3 + BottomLeft = 4 + LeftTop = 5 + RightTop = 6 + RightBottom = 7 + LftBottom = 8 + End Enum + + '''----------------------------------------------------------------------------- + ''' + ''' Exposure programs + ''' + ''' + ''' + ''' [altair] 10.9.2003 Created + ''' + '''----------------------------------------------------------------------------- + Public Enum ExposurePrograms + Manual = 1 + Normal = 2 + AperturePriority = 3 + ShutterPriority = 4 + Creative = 5 + Action = 6 + Portrait = 7 + Landscape = 8 + End Enum + + '''----------------------------------------------------------------------------- + ''' + ''' Exposure metering modes + ''' + ''' + ''' + ''' [altair] 10.9.2003 Created + ''' + '''----------------------------------------------------------------------------- + Public Enum ExposureMeteringModes + Unknown = 0 + Average = 1 + CenterWeightedAverage = 2 + Spot = 3 + MultiSpot = 4 + MultiSegment = 5 + [Partial] = 6 + Other = 255 + End Enum + + '''----------------------------------------------------------------------------- + ''' + ''' Flash activity modes + ''' + ''' + ''' + ''' [altair] 10.9.2003 Created + ''' + '''----------------------------------------------------------------------------- + Public Enum FlashModes + NotFired = 0 + Fired = 1 + FiredButNoStrobeReturned = 5 + FiredAndStrobeReturned = 7 + End Enum + + '''----------------------------------------------------------------------------- + ''' + ''' Possible light sources (white balance) + ''' + ''' + ''' + ''' [altair] 10.9.2003 Created + ''' + '''----------------------------------------------------------------------------- + Public Enum LightSources + Unknown = 0 + Daylight = 1 + Fluorescent = 2 + Tungsten = 3 + Flash = 10 + StandardLightA = 17 + StandardLightB = 18 + StandardLightC = 19 + D55 = 20 + D65 = 21 + D75 = 22 + Other = 255 + End Enum + + '''----------------------------------------------------------------------------- + ''' + ''' Represents rational which is type of some Exif properties + ''' + ''' + ''' + ''' [altair] 10.9.2003 Created + ''' + '''----------------------------------------------------------------------------- + Public Structure Rational + Dim Numerator As Int32 + Dim Denominator As Int32 + + '''----------------------------------------------------------------------------- + ''' + ''' Converts rational to string representation + ''' + ''' Optional, default "/". String to be used as delimiter of components. + ''' String representation of the rational. + ''' + ''' + ''' [altair] 10.9.2003 Created + ''' + '''----------------------------------------------------------------------------- + Shadows Function ToString(Optional ByVal Delimiter As String = "/") As String + Return Numerator & Delimiter & Denominator + End Function + + '''----------------------------------------------------------------------------- + ''' + ''' Converts rational to double precision real number + ''' + ''' The rational as double precision real number. + ''' + ''' + ''' [altair] 10.9.2003 Created + ''' + '''----------------------------------------------------------------------------- + Function ToDouble() As Double + Return Numerator / Denominator + End Function + End Structure + + '''----------------------------------------------------------------------------- + ''' + ''' Initializes new instance of this class. + ''' + ''' Bitmap to read exif information from + ''' + ''' + ''' [altair] 10.9.2003 Created + ''' + '''----------------------------------------------------------------------------- + Public Sub New(ByVal Bitmap As System.Drawing.Bitmap) + If Bitmap Is Nothing Then Throw New ArgumentNullException("Bitmap") + Me.Image = Bitmap + End Sub + + '''----------------------------------------------------------------------------- + ''' + ''' Returns all available data in formatted string form + ''' + ''' + ''' + ''' + ''' [altair] 10.9.2003 Created + ''' + '''----------------------------------------------------------------------------- + Public Overrides Function ToString() As String + Dim SB As New System.Text.StringBuilder + + SB.Append("Image:") + SB.Append("\n\tDimensions: " & Me.Width & " x " & Me.Height & " px") + SB.Append("\n\tResolution: " & Me.ResolutionX & " x " & Me.ResolutionY & " dpi") + SB.Append("\n\tOrientation: " & [Enum].GetName(GetType(Orientations), Me.Orientation)) + SB.Append("\n\tTitle: " & Me.Title) + SB.Append("\n\tDescription: " & Me.Description) + SB.Append("\n\tCopyright: " & Me.Copyright) + SB.Append("\nEquipment:") + SB.Append("\n\tMaker: " & Me.EquipmentMaker) + SB.Append("\n\tModel: " & Me.EquipmentModel) + SB.Append("\n\tSoftware: " & Me.Software) + SB.Append("\nDate and time:") + SB.Append("\n\tGeneral: " & Me.DateTimeLastModified.ToString()) + SB.Append("\n\tOriginal: " & Me.DateTimeOriginal.ToString()) + SB.Append("\n\tDigitized: " & Me.DateTimeDigitized.ToString()) + SB.Append("\nShooting conditions:") + SB.Append("\n\tExposure time: " & Me.ExposureTime.ToString("N4") & " s") + SB.Append("\n\tExposure program: " & [Enum].GetName(GetType(ExposurePrograms), Me.ExposureProgram)) + SB.Append("\n\tExposure mode: " & [Enum].GetName(GetType(ExposureMeteringModes), Me.ExposureMeteringMode)) + SB.Append("\n\tAperture: F" & Me.Aperture.ToString("N2")) + SB.Append("\n\tISO sensitivity: " & Me.ISO) + SB.Append("\n\tSubject distance: " & Me.SubjectDistance.ToString("N2") & " m") + SB.Append("\n\tFocal length: " & Me.FocalLength) + SB.Append("\n\tFlash: " & [Enum].GetName(GetType(FlashModes), Me.FlashMode)) + SB.Append("\n\tLight source (WB): " & [Enum].GetName(GetType(LightSources), Me.LightSource)) + SB.Append("\n\nCopyright (c) Michal A. Valasek - Altair Communications, 2003") + SB.Append("\nhttp://software.altaircom.net * support@altaircom.net") + + SB.Replace("\n", vbCrLf) + SB.Replace("\t", vbTab) + Return SB.ToString() + End Function + + '''----------------------------------------------------------------------------- + ''' + ''' Brand of equipment (EXIF EquipMake) + ''' + ''' + ''' + ''' + ''' [altair] 10.9.2003 Created + ''' + '''----------------------------------------------------------------------------- + Public ReadOnly Property EquipmentMaker() As String + Get + Return Me.GetPropertyString(TagNames.EquipMake) + End Get + End Property + + '''----------------------------------------------------------------------------- + ''' + ''' Model of equipment (EXIF EquipModel) + ''' + ''' + ''' + ''' + ''' [altair] 10.9.2003 Created + ''' + '''----------------------------------------------------------------------------- + Public ReadOnly Property EquipmentModel() As String + Get + Return Me.GetPropertyString(TagNames.EquipModel) + End Get + End Property + + '''----------------------------------------------------------------------------- + ''' + ''' Software used for processing (EXIF Software) + ''' + ''' + ''' + ''' + ''' [altair] 10.9.2003 Created + ''' + '''----------------------------------------------------------------------------- + Public ReadOnly Property Software() As String + Get + Return Me.GetPropertyString(TagNames.SoftwareUsed) + End Get + End Property + + '''----------------------------------------------------------------------------- + ''' + ''' Orientation of image (position of row 0, column 0) (EXIF Orientation) + ''' + ''' + ''' + ''' + ''' [altair] 10.9.2003 Created + ''' + '''----------------------------------------------------------------------------- + Public ReadOnly Property Orientation() As Orientations + Get + Dim X As Int32 = Me.GetPropertyInt16(TagNames.Orientation) + + If Not [Enum].IsDefined(GetType(Orientations), X) Then + Return Orientations.TopLeft + Else + Return CType([Enum].Parse(GetType(Orientations), [Enum].GetName(GetType(Orientations), X)), Orientations) + End If + End Get + End Property + + '''----------------------------------------------------------------------------- + ''' + ''' Time when image was last modified (EXIF DateTime). + ''' + ''' + ''' + ''' + ''' [altair] 10.9.2003 Created + ''' + '''----------------------------------------------------------------------------- + Public ReadOnly Property DateTimeLastModified() As DateTime + Get + Try + Return DateTime.ParseExact(Me.GetPropertyString(TagNames.DateTime), "yyyy\:MM\:dd HH\:mm\:ss", Nothing) + Catch ex As Exception + Return DateTime.MinValue + End Try + End Get + End Property + + '''----------------------------------------------------------------------------- + ''' + ''' Time when image was taken (EXIF DateTimeOriginal). + ''' + ''' + ''' + ''' + ''' [altair] 10.9.2003 Created + ''' + '''----------------------------------------------------------------------------- + Public ReadOnly Property DateTimeOriginal() As DateTime + Get + Try + Return DateTime.ParseExact(Me.GetPropertyString(TagNames.ExifDTOrig), "yyyy\:MM\:dd HH\:mm\:ss", Nothing) + Catch ex As Exception + Return DateTime.MinValue + End Try + End Get + End Property + + '''----------------------------------------------------------------------------- + ''' + ''' Time when image was digitized (EXIF DateTimeDigitized). + ''' + ''' + ''' + ''' + ''' [altair] 10.9.2003 Created + ''' + '''----------------------------------------------------------------------------- + Public ReadOnly Property DateTimeDigitized() As DateTime + Get + Try + Return DateTime.ParseExact(Me.GetPropertyString(TagNames.ExifDTDigitized), "yyyy\:MM\:dd HH\:mm\:ss", Nothing) + Catch ex As Exception + Return DateTime.MinValue + End Try + End Get + End Property + + '''----------------------------------------------------------------------------- + ''' + ''' Image width + ''' + ''' + ''' + ''' + ''' [altair] 10.9.2003 Created + ''' + '''----------------------------------------------------------------------------- + Public ReadOnly Property Width() As Int16 + Get + Return Me.GetPropertyInt16(TagNames.ImageWidth) + End Get + End Property + + '''----------------------------------------------------------------------------- + ''' + ''' Image height + ''' + ''' + ''' + ''' + ''' [altair] 10.9.2003 Created + ''' + '''----------------------------------------------------------------------------- + Public ReadOnly Property Height() As Int16 + Get + Return Me.GetPropertyInt16(TagNames.ImageHeight) + End Get + End Property + + '''----------------------------------------------------------------------------- + ''' + ''' X resolution in dpi (EXIF XResolution/ResolutionUnit) + ''' + ''' + ''' + ''' + ''' [altair] 10.9.2003 Created + ''' + '''----------------------------------------------------------------------------- + Public ReadOnly Property ResolutionX() As Double + Get + Dim R As Double = Me.GetPropertyRational(TagNames.XResolution).ToDouble() + + If Me.GetPropertyInt16(TagNames.ResolutionUnit) = 3 Then + '-- resolution is in points/cm + Return R * 2.54 + Else + '-- resolution is in points/inch + Return R + End If + End Get + End Property + + '''----------------------------------------------------------------------------- + ''' + ''' Y resolution in dpi (EXIF YResolution/ResolutionUnit) + ''' + ''' + ''' + ''' + ''' [altair] 10.9.2003 Created + ''' + '''----------------------------------------------------------------------------- + Public ReadOnly Property ResolutionY() As Double + Get + Dim R As Double = Me.GetPropertyRational(TagNames.YResolution).ToDouble() + + If Me.GetPropertyInt16(TagNames.ResolutionUnit) = 3 Then + '-- resolution is in points/cm + Return R * 2.54 + Else + '-- resolution is in points/inch + Return R + End If + End Get + End Property + + '''----------------------------------------------------------------------------- + ''' + ''' Image title (EXIF ImageTitle) + ''' + ''' + ''' + ''' + ''' [altair] 10.9.2003 Created + ''' + '''----------------------------------------------------------------------------- + Public ReadOnly Property Title() As String + Get + Return Me.GetPropertyString(TagNames.ImageTitle) + End Get + End Property + + '''----------------------------------------------------------------------------- + ''' + ''' Image description (EXIF ImageDescription) + ''' + ''' + ''' + ''' + ''' [altair] 10.9.2003 Created + ''' + '''----------------------------------------------------------------------------- + Public ReadOnly Property Description() As String + Get + Return Me.GetPropertyString(TagNames.ImageDescription) + End Get + End Property + + '''----------------------------------------------------------------------------- + ''' + ''' Image copyright (EXIF Copyright) + ''' + ''' + ''' + ''' + ''' [altair] 10.9.2003 Created + ''' + '''----------------------------------------------------------------------------- + Public ReadOnly Property Copyright() As String + Get + Return Me.GetPropertyString(TagNames.Copyright) + End Get + End Property + + '''----------------------------------------------------------------------------- + ''' + ''' Exposure time in seconds (EXIF ExifExposureTime/ExifShutterSpeed) + ''' + ''' + ''' + ''' + ''' [altair] 10.9.2003 Created + ''' + '''----------------------------------------------------------------------------- + Public ReadOnly Property ExposureTime() As Double + Get + If Me.IsPropertyDefined(TagNames.ExifExposureTime) Then + '-- Exposure time is explicitly specified + Return Me.GetPropertyRational(TagNames.ExifExposureTime).ToDouble + ElseIf Me.IsPropertyDefined(TagNames.ExifShutterSpeed) Then + '-- Compute exposure time from shutter speed + Return 1 / (2 ^ Me.GetPropertyRational(TagNames.ExifShutterSpeed).ToDouble) + Else + '-- Can't figure out + Return 0 + End If + End Get + End Property + + '''----------------------------------------------------------------------------- + ''' + ''' Aperture value as F number (EXIF ExifFNumber/ExifApertureValue) + ''' + ''' + ''' + ''' + ''' [altair] 10.9.2003 Created + ''' + '''----------------------------------------------------------------------------- + Public ReadOnly Property Aperture() As Double + Get + If Me.IsPropertyDefined(TagNames.ExifFNumber) Then + Return Me.GetPropertyRational(TagNames.ExifFNumber).ToDouble() + ElseIf Me.IsPropertyDefined(TagNames.ExifAperture) Then + Return System.Math.Sqrt(2) ^ Me.GetPropertyRational(TagNames.ExifAperture).ToDouble() + Else + Return 0 + End If + End Get + End Property + + '''----------------------------------------------------------------------------- + ''' + ''' Exposure program used (EXIF ExifExposureProg) + ''' + ''' + ''' If not specified, returns Normal (2) + ''' + ''' [altair] 10.9.2003 Created + ''' + '''----------------------------------------------------------------------------- + Public ReadOnly Property ExposureProgram() As ExposurePrograms + Get + Dim X As Int32 = Me.GetPropertyInt16(TagNames.ExifExposureProg) + + If [Enum].IsDefined(GetType(ExposurePrograms), X) Then + Return CType([Enum].Parse(GetType(ExposurePrograms), [Enum].GetName(GetType(ExposurePrograms), X)), ExposurePrograms) + Else + Return ExposurePrograms.Normal + End If + End Get + End Property + + '''----------------------------------------------------------------------------- + ''' + ''' ISO sensitivity + ''' + ''' + ''' + ''' + ''' [altair] 10.9.2003 Created + ''' + '''----------------------------------------------------------------------------- + Public ReadOnly Property ISO() As Int16 + Get + Return Me.GetPropertyInt16(TagNames.ExifISOSpeed) + End Get + End Property + + '''----------------------------------------------------------------------------- + ''' + ''' Subject distance in meters (EXIF SubjectDistance) + ''' + ''' + ''' + ''' + ''' [altair] 10.9.2003 Created + ''' + '''----------------------------------------------------------------------------- + Public ReadOnly Property SubjectDistance() As Double + Get + Return Me.GetPropertyRational(TagNames.ExifSubjectDist).ToDouble() + End Get + End Property + + '''----------------------------------------------------------------------------- + ''' + ''' Exposure method metering mode used (EXIF MeteringMode) + ''' + ''' + ''' If not specified, returns Unknown (0) + ''' + ''' [altair] 10.9.2003 Created + ''' + '''----------------------------------------------------------------------------- + Public ReadOnly Property ExposureMeteringMode() As ExposureMeteringModes + Get + Dim X As Int32 = Me.GetPropertyInt16(TagNames.ExifMeteringMode) + + If [Enum].IsDefined(GetType(ExposureMeteringModes), X) Then + Return CType([Enum].Parse(GetType(ExposureMeteringModes), [Enum].GetName(GetType(ExposureMeteringModes), X)), ExposureMeteringModes) + Else + Return ExposureMeteringModes.Unknown + End If + End Get + End Property + + '''----------------------------------------------------------------------------- + ''' + ''' Focal length of lenses in mm (EXIF FocalLength) + ''' + ''' + ''' + ''' + ''' [altair] 10.9.2003 Created + ''' + '''----------------------------------------------------------------------------- + Public ReadOnly Property FocalLength() As Double + Get + Return Me.GetPropertyRational(TagNames.ExifFocalLength).ToDouble + End Get + End Property + + '''----------------------------------------------------------------------------- + ''' + ''' Flash mode (EXIF Flash) + ''' + ''' + ''' If not present, value NotFired (0) is returned + ''' + ''' [altair] 10.9.2003 Created + ''' + '''----------------------------------------------------------------------------- + Public ReadOnly Property FlashMode() As FlashModes + Get + Dim X As Int32 = Me.GetPropertyInt16(TagNames.ExifFlash) + + If [Enum].IsDefined(GetType(FlashModes), X) Then + Return CType([Enum].Parse(GetType(FlashModes), [Enum].GetName(GetType(FlashModes), X)), FlashModes) + Else + Return FlashModes.NotFired + End If + End Get + End Property + + '''----------------------------------------------------------------------------- + ''' + ''' Light source / white balance (EXIF LightSource) + ''' + ''' + ''' If not specified, returns Unknown (0). + ''' + ''' [altair] 10.9.2003 Created + ''' + '''----------------------------------------------------------------------------- + Public ReadOnly Property LightSource() As LightSources + Get + Dim X As Int32 = Me.GetPropertyInt16(TagNames.ExifLightSource) + + If [Enum].IsDefined(GetType(LightSources), X) Then + Return CType([Enum].Parse(GetType(LightSources), [Enum].GetName(GetType(LightSources), X)), LightSources) + Else + Return LightSources.Unknown + End If + End Get + End Property + + '''----------------------------------------------------------------------------- + ''' + ''' Checks if current image has specified certain property + ''' + ''' + ''' True if image has specified property, False otherwise. + ''' + ''' + ''' [altair] 10.9.2003 Created + ''' + '''----------------------------------------------------------------------------- + Public Function IsPropertyDefined(ByVal PID As Int32) As Boolean + Return CBool([Array].IndexOf(Me.Image.PropertyIdList, PID) > -1) + End Function + + '''----------------------------------------------------------------------------- + ''' + ''' Gets specified Int32 property + ''' + ''' Property ID + ''' Optional, default 0. Default value returned if property is not present. + ''' Value of property or DefaultValue if property is not present. + ''' + ''' [altair] 10.9.2003 Created + ''' + '''----------------------------------------------------------------------------- + Public Function GetPropertyInt32(ByVal PID As Int32, Optional ByVal DefaultValue As Int32 = 0) As Int32 + If Me.IsPropertyDefined(PID) Then + Return GetInt32(Me.Image.GetPropertyItem(PID).Value) + Else + Return DefaultValue + End If + End Function + + '''----------------------------------------------------------------------------- + ''' + ''' Gets specified Int16 property + ''' + ''' Property ID + ''' Optional, default 0. Default value returned if property is not present. + ''' Value of property or DefaultValue if property is not present. + ''' + ''' [altair] 10.9.2003 Created + ''' + '''----------------------------------------------------------------------------- + Public Function GetPropertyInt16(ByVal PID As Int32, Optional ByVal DefaultValue As Int16 = 0) As Int16 + If Me.IsPropertyDefined(PID) Then + Return GetInt16(Me.Image.GetPropertyItem(PID).Value) + Else + Return DefaultValue + End If + End Function + + '''----------------------------------------------------------------------------- + ''' + ''' Gets specified string property + ''' + ''' Property ID + ''' Optional, default String.Empty. Default value returned if property is not present. + ''' + ''' Value of property or DefaultValue if property is not present. + ''' + ''' [altair] 10.9.2003 Created + ''' + '''----------------------------------------------------------------------------- + Public Function GetPropertyString(ByVal PID As Int32, Optional ByVal DefaultValue As String = "") As String + If Me.IsPropertyDefined(PID) Then + Return GetString(Me.Image.GetPropertyItem(PID).Value) + Else + Return DefaultValue + End If + End Function + + '''----------------------------------------------------------------------------- + ''' + ''' Gets specified rational property + ''' + ''' Property ID + ''' + ''' Value of property or 0/1 if not present. + ''' + ''' [altair] 10.9.2003 Created + ''' + '''----------------------------------------------------------------------------- + Public Function GetPropertyRational(ByVal PID As Int32) As Rational + If Me.IsPropertyDefined(PID) Then + Return GetRational(Me.Image.GetPropertyItem(PID).Value) + Else + Dim R As Rational + R.Numerator = 0 + R.Denominator = 1 + Return R + End If + End Function + + '''----------------------------------------------------------------------------- + ''' + ''' Reads Int32 from EXIF bytearray. + ''' + ''' EXIF bytearray to process + ''' + ''' + ''' + ''' [altair] 10.9.2003 Created + ''' + '''----------------------------------------------------------------------------- + Public Shared Function GetInt32(ByVal B As Byte()) As Int32 + If B.Length < 4 Then Throw New ArgumentException("Data too short (4 bytes expected)", "B") + Return B(3) << 24 Or B(2) << 16 Or B(1) << 8 Or B(0) + End Function + + '''----------------------------------------------------------------------------- + ''' + ''' Reads Int16 from EXIF bytearray. + ''' + ''' EXIF bytearray to process + ''' + ''' + ''' + ''' [altair] 10.9.2003 Created + ''' + '''----------------------------------------------------------------------------- + Public Shared Function GetInt16(ByVal B As Byte()) As Int16 + If B.Length < 2 Then Throw New ArgumentException("Data too short (2 bytes expected)", "B") + Return B(1) << 8 Or B(0) + End Function + + '''----------------------------------------------------------------------------- + ''' + ''' Reads string from EXIF bytearray. + ''' + ''' EXIF bytearray to process + ''' + ''' + ''' + ''' [altair] 10.9.2003 Created + ''' + '''----------------------------------------------------------------------------- + Public Shared Function GetString(ByVal B As Byte()) As String + Dim R As String = System.Text.Encoding.ASCII.GetString(B) + If R.EndsWith(vbNullChar) Then R = R.Substring(0, R.Length - 1) + Return R + End Function + + '''----------------------------------------------------------------------------- + ''' + ''' Reads rational from EXIF bytearray. + ''' + ''' EXIF bytearray to process + ''' + ''' + ''' + ''' [altair] 10.9.2003 Created + ''' + '''----------------------------------------------------------------------------- + Public Shared Function GetRational(ByVal B As Byte()) As Rational + Dim R As New Rational, N(3), D(3) As Byte + Array.Copy(B, 0, N, 0, 4) + Array.Copy(B, 4, D, 0, 4) + R.Denominator = GetInt32(D) + R.Numerator = GetInt32(N) + Return R + End Function + + '''----------------------------------------------------------------------------- + ''' + ''' Disposes unmanaged resources of this class + ''' + ''' + ''' + ''' [altair] 10.9.2003 Created + ''' + '''----------------------------------------------------------------------------- + Public Sub Dispose() Implements System.IDisposable.Dispose + Me.Image.Dispose() + End Sub +End Class diff --git a/CatalogVbLib/My Project/Application.Designer.vb b/CatalogVbLib/My Project/Application.Designer.vb new file mode 100644 index 0000000..96b7331 --- /dev/null +++ b/CatalogVbLib/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.34011 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/CatalogVbLib/My Project/Application.myapp b/CatalogVbLib/My Project/Application.myapp new file mode 100644 index 0000000..758895d --- /dev/null +++ b/CatalogVbLib/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 1 + true + diff --git a/CatalogVbLib/My Project/AssemblyInfo.vb b/CatalogVbLib/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..be5e3ed --- /dev/null +++ b/CatalogVbLib/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' Le informazioni generali relative a un assembly sono controllate dal seguente +' insieme di attributi. Per modificare le informazioni associate a un assembly +' è necessario modificare i valori di questi attributi. + +' Controllare i valori degli attributi dell'assembly + + + + + + + + + + +'Se il progetto viene esposto a COM, il GUID seguente verrà utilizzato come ID della libreria dei tipi + + +' Le informazioni sulla versione di un assembly sono costituite dai seguenti quattro valori: +' +' Numero di versione principale +' Numero di versione secondario +' Numero build +' Revisione +' +' È possibile specificare tutti i valori oppure impostare valori predefiniti per i numeri relativi alla revisione e alla build +' utilizzando l'asterisco (*) come descritto di seguito: +' + + + diff --git a/CatalogVbLib/My Project/Resources.Designer.vb b/CatalogVbLib/My Project/Resources.Designer.vb new file mode 100644 index 0000000..4c63fee --- /dev/null +++ b/CatalogVbLib/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.34011 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("CatalogVbLib.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/CatalogVbLib/My Project/Resources.resx b/CatalogVbLib/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/CatalogVbLib/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/CatalogVbLib/My Project/Settings.Designer.vb b/CatalogVbLib/My Project/Settings.Designer.vb new file mode 100644 index 0000000..30ce19b --- /dev/null +++ b/CatalogVbLib/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.34011 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.CatalogVbLib.My.MySettings + Get + Return Global.CatalogVbLib.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/CatalogVbLib/My Project/Settings.settings b/CatalogVbLib/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/CatalogVbLib/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/CatalogVbLib/PicSettings.vb b/CatalogVbLib/PicSettings.vb new file mode 100644 index 0000000..42a0da7 --- /dev/null +++ b/CatalogVbLib/PicSettings.vb @@ -0,0 +1,606 @@ +Imports System.IO +Imports System.Drawing.Drawing2D +Imports System.Drawing.Imaging +Imports System.Windows.Forms +Imports System.Drawing + +Public Module PicSettings + + Private _DirectorySorgente As String + Private _DirectoryDestinazione As String + + Private _DimVert As Integer + Private _MargVert As Integer + + + Private _DimStandard As Integer + Private _DimStandardMiniatura As Integer + + Private _NomeData As Boolean + Private _TestoNome As Boolean + Private _UsaOrarioMiniatura As Boolean + Private _UsaOrarioTestoApplicare As Boolean + Private _UsaTempoGaraTestoApplicare As Boolean + Private _TestoFirmaStart As String + Private _TestoFirmaStartV As String + Private _DataPartenza As DateTime + Private _TestoOrario As String + + Private _UsaRotazioneAutomatica As Boolean + Private _UsaForzaJpg As Boolean + + Private _LarghezzaSmall As Integer + Private _AltezzaSmall As Integer + + Private _CreaMiniature As Boolean + Private _AggiungiScritteMiniature As Boolean + Private _AggTempoGaraMin As Boolean + Private _AggNumTempMin As Boolean + + Private _Suffisso As String + Private _Codice As String + + Private _Trasparenza As Integer + Private _IlFont As String + Private _Grassetto As Boolean + + Private _Posizione As String + Private _Allineamento As String + Private _Margine As Integer + + Private _LogoAltezza As Integer + Private _LogoLarghezza As Integer + + Private _fontColoreRGB As System.Drawing.Color + + Private _LogoAggiungi As Boolean + Private _LogoNomeFile As String + Private _LogoTrasparenza As String + Private _LogoMargine As String + Private _LogoPosizioneH As String + Private _LogoPosizioneV As String + + Private _FotoGrandeDimOrigina As Boolean + Private _AltezzaBig As Integer + Private _LarghezzaBig As Integer + Private _DestDir As DirectoryInfo + Private _DimMin As Integer + + Private _TestoMin As Boolean + + Private _SecretDefault As Boolean + Private _SecretBig As Boolean + Private _SecretSmall As Boolean + + Private _SecretPathSmall As String + Private _SecretPathBig As String + + Private _jpegQuality As Long + Private _jpegQualityMin As Long + + Private FotoRuotaADestra As Boolean = False + Private FotoRuotaASinistra As Boolean = False + + Private TempMinText As String = "" + + Private _mainForm As Form + + 'Private progressBar As System.Windows.Forms.ProgressBar + + + + Public Property mainForm() As Form + Get + Return _mainForm + End Get + Set(ByVal value As Form) + _mainForm = value + End Set + End Property + + Public Property DirectorySorgente() As String + Get + Return _DirectorySorgente + End Get + Set(ByVal value As String) + _DirectorySorgente = value + End Set + End Property + + Public Property DirectoryDestinazione() As String + Get + Return _DirectoryDestinazione + End Get + Set(ByVal value As String) + _DirectoryDestinazione = value + End Set + End Property + + Public Property TestoFirmaStart() As String + Get + Return _TestoFirmaStart + End Get + Set(ByVal value As String) + _TestoFirmaStart = value + End Set + End Property + + Public Property TestoFirmaStartV() As String + Get + Return _TestoFirmaStartV + End Get + + Set(ByVal value As String) + _TestoFirmaStartV = value + End Set + End Property + + Public Property DataPartenza() As DateTime + Get + Return _DataPartenza + End Get + Set(ByVal value As DateTime) + _DataPartenza = value + End Set + End Property + + Public Property TestoOrario() As String + Get + Return _TestoOrario + End Get + Set(ByVal value As String) + _TestoOrario = value + End Set + End Property + + Public Property DimStandard() As Integer + Get + Return _DimStandard + End Get + Set(ByVal value As Integer) + _DimStandard = value + End Set + End Property + + Public Property DimStandardMiniatura() As Integer + Get + Return _DimStandardMiniatura + End Get + Set(ByVal value As Integer) + _DimStandardMiniatura = value + End Set + End Property + + Public Property NomeData() As Boolean + Get + Return _NomeData + End Get + Set(ByVal value As Boolean) + _NomeData = value + End Set + End Property + + Public Property TestoNome() As Boolean + Get + Return _TestoNome + End Get + Set(ByVal value As Boolean) + _TestoNome = value + End Set + End Property + + Public Property UsaOrarioMiniatura() As Boolean + Get + Return _UsaOrarioMiniatura + End Get + Set(ByVal value As Boolean) + _UsaOrarioMiniatura = value + End Set + End Property + + Public Property UsaOrarioTestoApplicare() As Boolean + Get + Return _UsaOrarioTestoApplicare + End Get + Set(ByVal value As Boolean) + _UsaOrarioTestoApplicare = value + End Set + End Property + + Public Property UsaTempoGaraTestoApplicare() As Boolean + Get + Return _UsaTempoGaraTestoApplicare + End Get + Set(ByVal value As Boolean) + _UsaTempoGaraTestoApplicare = value + End Set + End Property + + Public Property UsaRotazioneAutomatica() As Boolean + Get + Return _UsaRotazioneAutomatica + End Get + Set(ByVal value As Boolean) + _UsaRotazioneAutomatica = value + End Set + End Property + + Public Property UsaForzaJpg() As Boolean + Get + Return _UsaForzaJpg + End Get + Set(ByVal value As Boolean) + _UsaForzaJpg = value + End Set + End Property + + + + Public Property LarghezzaSmall() As Integer + Get + Return _LarghezzaSmall + End Get + Set(ByVal value As Integer) + _LarghezzaSmall = value + End Set + End Property + + Public Property AltezzaSmall() As Integer + Get + Return _AltezzaSmall + End Get + Set(ByVal value As Integer) + _AltezzaSmall = value + End Set + End Property + + + Public Property CreaMiniature() As Boolean + Get + Return _CreaMiniature + End Get + Set(ByVal value As Boolean) + _CreaMiniature = value + End Set + End Property + + Public Property AggiungiScritteMiniature() As Boolean + Get + Return _AggiungiScritteMiniature + End Get + Set(ByVal value As Boolean) + _AggiungiScritteMiniature = value + End Set + End Property + + + Public Property Suffisso() As String + Get + Return _Suffisso + End Get + Set(ByVal value As String) + _Suffisso = value + End Set + End Property + + Public Property Codice() As String + Get + Return _Codice + End Get + Set(ByVal value As String) + _Codice = value + End Set + End Property + + + Public Property Trasparenza() As Integer + Get + Return _Trasparenza + End Get + Set(ByVal value As Integer) + _Trasparenza = value + End Set + End Property + + Public Property IlFont() As String + Get + Return _IlFont + End Get + Set(ByVal value As String) + _IlFont = value + End Set + End Property + + Public Property Grassetto() As Boolean + Get + Return _Grassetto + End Get + Set(ByVal value As Boolean) + _Grassetto = value + End Set + End Property + + Public Property Posizione() As String + Get + Return _Posizione + End Get + Set(ByVal value As String) + _Posizione = value + End Set + End Property + + Public Property Allineamento() As String + Get + Return _Allineamento + End Get + Set(ByVal value As String) + _Allineamento = value + End Set + End Property + + Public Property Margine() As Integer + Get + Return _Margine + End Get + Set(ByVal value As Integer) + _Margine = value + End Set + End Property + + Public Property LogoAltezza() As Integer + Get + Return _LogoAltezza + End Get + Set(ByVal value As Integer) + _LogoAltezza = value + End Set + End Property + + Public Property LogoLarghezza() As Integer + Get + Return _LogoLarghezza + End Get + Set(ByVal value As Integer) + _LogoLarghezza = value + End Set + End Property + + Public Property fontColoreRGB() As Color + Get + Return _fontColoreRGB + End Get + Set(ByVal value As Color) + _fontColoreRGB = value + End Set + End Property + + Public Property LogoAggiungi() As Boolean + Get + Return _LogoAggiungi + End Get + Set(ByVal value As Boolean) + _LogoAggiungi = value + End Set + End Property + + Public Property LogoNomeFile() As String + Get + Return _LogoNomeFile + End Get + Set(ByVal value As String) + _LogoNomeFile = value + End Set + End Property + + Public Property LogoTrasparenza() As String + Get + Return _LogoTrasparenza + End Get + Set(ByVal value As String) + _LogoTrasparenza = value + End Set + End Property + + Public Property LogoMargine() As String + Get + Return _LogoMargine + End Get + Set(ByVal value As String) + _LogoMargine = value + End Set + End Property + + Public Property LogoPosizioneH() As String + Get + Return _LogoPosizioneH + End Get + Set(ByVal value As String) + _LogoPosizioneH = value + End Set + End Property + + Public Property LogoPosizioneV() As String + Get + Return _LogoPosizioneV + End Get + Set(ByVal value As String) + _LogoPosizioneV = value + End Set + End Property + + Public Property FotoGrandeDimOrigina() As Boolean + Get + Return _FotoGrandeDimOrigina + End Get + Set(ByVal value As Boolean) + _FotoGrandeDimOrigina = value + End Set + End Property + + Public Property AltezzaBig() As Integer + Get + Return _AltezzaBig + End Get + Set(ByVal value As Integer) + _AltezzaBig = value + End Set + End Property + + Public Property LarghezzaBig() As Integer + Get + Return _LarghezzaBig + End Get + Set(ByVal value As Integer) + _LarghezzaBig = value + End Set + End Property + + Public Property DestDir() As DirectoryInfo + Get + Return _DestDir + End Get + Set(ByVal value As DirectoryInfo) + _DestDir = value + End Set + End Property + + Public Property DimVert() As Integer + Get + Return _DimVert + + End Get + Set(ByVal value As Integer) + _DimVert = value + + End Set + End Property + + Public Property MargVert() As Integer + Get + Return _MargVert + + End Get + Set(ByVal value As Integer) + _MargVert = value + End Set + End Property + + Public Property TestoMin() As Boolean + Get + Return _TestoMin + + End Get + Set(ByVal value As Boolean) + _TestoMin = value + + End Set + End Property + + Public Property DimMin() As Integer + Get + Return _DimMin + + End Get + Set(ByVal value As Integer) + _DimMin = value + + End Set + End Property + + Public Property SecretDefault() As Boolean + Get + Return _SecretDefault + + End Get + Set(ByVal value As Boolean) + _SecretDefault = value + + End Set + End Property + + Public Property SecretBig() As Boolean + Get + Return _SecretBig + + End Get + Set(ByVal value As Boolean) + _SecretBig = value + + End Set + End Property + + Public Property SecretSmall() As Boolean + Get + Return _SecretSmall + + End Get + Set(ByVal value As Boolean) + _SecretSmall = value + + End Set + End Property + + Public Property SecretPathSmall() As String + Get + Return _SecretPathSmall + + End Get + Set(ByVal value As String) + _SecretPathSmall = value + + End Set + End Property + + Public Property SecretPathBig() As String + Get + Return _SecretPathBig + + End Get + Set(ByVal value As String) + _SecretPathBig = value + + End Set + End Property + + Public Property AggTempoGaraMin() As Boolean + Get + Return _AggTempoGaraMin + + End Get + Set(ByVal value As Boolean) + _AggTempoGaraMin = value + + End Set + End Property + + Public Property AggNumTempMin() As Boolean + Get + Return _AggNumTempMin + + End Get + Set(ByVal value As Boolean) + _AggNumTempMin = value + + End Set + End Property + + Public Property jpegQuality() As Long + Get + Return _jpegQuality + End Get + Set(ByVal value As Long) + _jpegQuality = value + End Set + + End Property + + Public Property jpegQualityMin() As Long + Get + Return _jpegQualityMin + End Get + Set(ByVal value As Long) + _jpegQualityMin = value + End Set + + End Property +End Module diff --git a/ImageCatalogCS/AboutForm.Designer.cs b/ImageCatalogCS/AboutForm.Designer.cs new file mode 100644 index 0000000..01cd505 --- /dev/null +++ b/ImageCatalogCS/AboutForm.Designer.cs @@ -0,0 +1,101 @@ +namespace ImageCatalogCS +{ + partial class AboutForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AboutForm)); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.button1 = new System.Windows.Forms.Button(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(12, 213); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(75, 13); + this.label1.TabIndex = 0; + this.label1.Text = "Image Catalog"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(350, 213); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(66, 13); + this.label2.TabIndex = 1; + this.label2.Text = "Versione 3.0"; + // + // button1 + // + this.button1.Location = new System.Drawing.Point(176, 239); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 23); + this.button1.TabIndex = 2; + this.button1.Text = "Chiudi"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // pictureBox1 + // + this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image"))); + this.pictureBox1.InitialImage = ((System.Drawing.Image)(resources.GetObject("pictureBox1.InitialImage"))); + this.pictureBox1.Location = new System.Drawing.Point(15, 13); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(401, 197); + this.pictureBox1.TabIndex = 3; + this.pictureBox1.TabStop = false; + // + // AboutForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(433, 274); + this.Controls.Add(this.pictureBox1); + this.Controls.Add(this.button1); + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.Name = "AboutForm"; + this.Text = "AboutForm"; + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.PictureBox pictureBox1; + } +} \ No newline at end of file diff --git a/ImageCatalogCS/AboutForm.cs b/ImageCatalogCS/AboutForm.cs new file mode 100644 index 0000000..80e20f9 --- /dev/null +++ b/ImageCatalogCS/AboutForm.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ImageCatalogCS +{ + public partial class AboutForm : Form + { + public AboutForm() + { + InitializeComponent(); + } + + private void button1_Click(object sender, EventArgs e) + { + this.Close(); + } + } +} diff --git a/ImageCatalogCS/AboutForm.resx b/ImageCatalogCS/AboutForm.resx new file mode 100644 index 0000000..02a449f --- /dev/null +++ b/ImageCatalogCS/AboutForm.resx @@ -0,0 +1,229 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + + + \ No newline at end of file diff --git a/ImageCatalogCS/App.config b/ImageCatalogCS/App.config new file mode 100644 index 0000000..8e15646 --- /dev/null +++ b/ImageCatalogCS/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/ImageCatalogCS/CreaImmagineSeparateThread.cs b/ImageCatalogCS/CreaImmagineSeparateThread.cs new file mode 100644 index 0000000..4444736 --- /dev/null +++ b/ImageCatalogCS/CreaImmagineSeparateThread.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ImageCatalogCS +{ + class CreaImmagineSeparateThread + { + } +} diff --git a/ImageCatalogCS/ExifReader.cs b/ImageCatalogCS/ExifReader.cs new file mode 100644 index 0000000..9f801be --- /dev/null +++ b/ImageCatalogCS/ExifReader.cs @@ -0,0 +1,1166 @@ +using Microsoft.VisualBasic; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Data; +using System.Diagnostics; +///----------------------------------------------------------------------------- +/// +/// Utility class for reading EXIF data from images. Provides abstraction +/// for most common data and generic utilities for work with all other. +/// +/// +/// Copyright (c) Michal A. Valášek - Altair Communications, 2003 +/// Copmany: http://software.altaircom.net * support@altaircom.net +/// Private: http://www.rider.cz * developer@rider.cz +/// This is free software licensed under GNU Lesser General Public License +/// +/// +/// [altair] 10.9.2003 Created +/// +///----------------------------------------------------------------------------- +public class ExifReader : IDisposable +{ + + + private System.Drawing.Bitmap Image; + ///----------------------------------------------------------------------------- + /// + /// Contains possible values of EXIF tag names (ID) + /// + /// See GdiPlusImaging.h + /// + /// [altair] 10.9.2003 Created + /// + ///----------------------------------------------------------------------------- + public enum TagNames + { + ExifIFD = 0x8769, + GpsIFD = 0x8825, + NewSubfileType = 0xfe, + SubfileType = 0xff, + ImageWidth = 0x100, + ImageHeight = 0x101, + BitsPerSample = 0x102, + Compression = 0x103, + PhotometricInterp = 0x106, + ThreshHolding = 0x107, + CellWidth = 0x108, + CellHeight = 0x109, + FillOrder = 0x10a, + DocumentName = 0x10d, + ImageDescription = 0x10e, + EquipMake = 0x10f, + EquipModel = 0x110, + StripOffsets = 0x111, + Orientation = 0x112, + SamplesPerPixel = 0x115, + RowsPerStrip = 0x116, + StripBytesCount = 0x117, + MinSampleValue = 0x118, + MaxSampleValue = 0x119, + XResolution = 0x11a, + YResolution = 0x11b, + PlanarConfig = 0x11c, + PageName = 0x11d, + XPosition = 0x11e, + YPosition = 0x11f, + FreeOffset = 0x120, + FreeByteCounts = 0x121, + GrayResponseUnit = 0x122, + GrayResponseCurve = 0x123, + T4Option = 0x124, + T6Option = 0x125, + ResolutionUnit = 0x128, + PageNumber = 0x129, + TransferFuncition = 0x12d, + SoftwareUsed = 0x131, + DateTime = 0x132, + Artist = 0x13b, + HostComputer = 0x13c, + Predictor = 0x13d, + WhitePoint = 0x13e, + PrimaryChromaticities = 0x13f, + ColorMap = 0x140, + HalftoneHints = 0x141, + TileWidth = 0x142, + TileLength = 0x143, + TileOffset = 0x144, + TileByteCounts = 0x145, + InkSet = 0x14c, + InkNames = 0x14d, + NumberOfInks = 0x14e, + DotRange = 0x150, + TargetPrinter = 0x151, + ExtraSamples = 0x152, + SampleFormat = 0x153, + SMinSampleValue = 0x154, + SMaxSampleValue = 0x155, + TransferRange = 0x156, + JPEGProc = 0x200, + JPEGInterFormat = 0x201, + JPEGInterLength = 0x202, + JPEGRestartInterval = 0x203, + JPEGLosslessPredictors = 0x205, + JPEGPointTransforms = 0x206, + JPEGQTables = 0x207, + JPEGDCTables = 0x208, + JPEGACTables = 0x209, + YCbCrCoefficients = 0x211, + YCbCrSubsampling = 0x212, + YCbCrPositioning = 0x213, + REFBlackWhite = 0x214, + ICCProfile = 0x8773, + Gamma = 0x301, + ICCProfileDescriptor = 0x302, + SRGBRenderingIntent = 0x303, + ImageTitle = 0x320, + Copyright = 0x8298, + ResolutionXUnit = 0x5001, + ResolutionYUnit = 0x5002, + ResolutionXLengthUnit = 0x5003, + ResolutionYLengthUnit = 0x5004, + PrintFlags = 0x5005, + PrintFlagsVersion = 0x5006, + PrintFlagsCrop = 0x5007, + PrintFlagsBleedWidth = 0x5008, + PrintFlagsBleedWidthScale = 0x5009, + HalftoneLPI = 0x500a, + HalftoneLPIUnit = 0x500b, + HalftoneDegree = 0x500c, + HalftoneShape = 0x500d, + HalftoneMisc = 0x500e, + HalftoneScreen = 0x500f, + JPEGQuality = 0x5010, + GridSize = 0x5011, + ThumbnailFormat = 0x5012, + ThumbnailWidth = 0x5013, + ThumbnailHeight = 0x5014, + ThumbnailColorDepth = 0x5015, + ThumbnailPlanes = 0x5016, + ThumbnailRawBytes = 0x5017, + ThumbnailSize = 0x5018, + ThumbnailCompressedSize = 0x5019, + ColorTransferFunction = 0x501a, + ThumbnailData = 0x501b, + ThumbnailImageWidth = 0x5020, + ThumbnailImageHeight = 0x502, + ThumbnailBitsPerSample = 0x5022, + ThumbnailCompression = 0x5023, + ThumbnailPhotometricInterp = 0x5024, + ThumbnailImageDescription = 0x5025, + ThumbnailEquipMake = 0x5026, + ThumbnailEquipModel = 0x5027, + ThumbnailStripOffsets = 0x5028, + ThumbnailOrientation = 0x5029, + ThumbnailSamplesPerPixel = 0x502a, + ThumbnailRowsPerStrip = 0x502b, + ThumbnailStripBytesCount = 0x502c, + ThumbnailResolutionX = 0x502d, + ThumbnailResolutionY = 0x502e, + ThumbnailPlanarConfig = 0x502f, + ThumbnailResolutionUnit = 0x5030, + ThumbnailTransferFunction = 0x5031, + ThumbnailSoftwareUsed = 0x5032, + ThumbnailDateTime = 0x5033, + ThumbnailArtist = 0x5034, + ThumbnailWhitePoint = 0x5035, + ThumbnailPrimaryChromaticities = 0x5036, + ThumbnailYCbCrCoefficients = 0x5037, + ThumbnailYCbCrSubsampling = 0x5038, + ThumbnailYCbCrPositioning = 0x5039, + ThumbnailRefBlackWhite = 0x503a, + ThumbnailCopyRight = 0x503b, + LuminanceTable = 0x5090, + ChrominanceTable = 0x5091, + FrameDelay = 0x5100, + LoopCount = 0x5101, + PixelUnit = 0x5110, + PixelPerUnitX = 0x5111, + PixelPerUnitY = 0x5112, + PaletteHistogram = 0x5113, + ExifExposureTime = 0x829a, + ExifFNumber = 0x829d, + ExifExposureProg = 0x8822, + ExifSpectralSense = 0x8824, + ExifISOSpeed = 0x8827, + ExifOECF = 0x8828, + ExifVer = 0x9000, + ExifDTOrig = 0x9003, + ExifDTDigitized = 0x9004, + ExifCompConfig = 0x9101, + ExifCompBPP = 0x9102, + ExifShutterSpeed = 0x9201, + ExifAperture = 0x9202, + ExifBrightness = 0x9203, + ExifExposureBias = 0x9204, + ExifMaxAperture = 0x9205, + ExifSubjectDist = 0x9206, + ExifMeteringMode = 0x9207, + ExifLightSource = 0x9208, + ExifFlash = 0x9209, + ExifFocalLength = 0x920a, + ExifMakerNote = 0x927c, + ExifUserComment = 0x9286, + ExifDTSubsec = 0x9290, + ExifDTOrigSS = 0x9291, + ExifDTDigSS = 0x9292, + ExifFPXVer = 0xa000, + ExifColorSpace = 0xa001, + ExifPixXDim = 0xa002, + ExifPixYDim = 0xa003, + ExifRelatedWav = 0xa004, + ExifInterop = 0xa005, + ExifFlashEnergy = 0xa20b, + ExifSpatialFR = 0xa20c, + ExifFocalXRes = 0xa20e, + ExifFocalYRes = 0xa20f, + ExifFocalResUnit = 0xa210, + ExifSubjectLoc = 0xa214, + ExifExposureIndex = 0xa215, + ExifSensingMethod = 0xa217, + ExifFileSource = 0xa300, + ExifSceneType = 0xa301, + ExifCfaPattern = 0xa302, + GpsVer = 0x0, + GpsLatitudeRef = 0x1, + GpsLatitude = 0x2, + GpsLongitudeRef = 0x3, + GpsLongitude = 0x4, + GpsAltitudeRef = 0x5, + GpsAltitude = 0x6, + GpsGpsTime = 0x7, + GpsGpsSatellites = 0x8, + GpsGpsStatus = 0x9, + GpsGpsMeasureMode = 0xa, + GpsGpsDop = 0xb, + GpsSpeedRef = 0xc, + GpsSpeed = 0xd, + GpsTrackRef = 0xe, + GpsTrack = 0xf, + GpsImgDirRef = 0x10, + GpsImgDir = 0x11, + GpsMapDatum = 0x12, + GpsDestLatRef = 0x13, + GpsDestLat = 0x14, + GpsDestLongRef = 0x15, + GpsDestLong = 0x16, + GpsDestBearRef = 0x17, + GpsDestBear = 0x18, + GpsDestDistRef = 0x19, + GpsDestDist = 0x1a + } + + ///----------------------------------------------------------------------------- + /// + /// Real position of 0th row and column of picture + /// + /// + /// + /// [altair] 10.9.2003 Created + /// + ///----------------------------------------------------------------------------- + public enum Orientations + { + TopLeft = 1, + TopRight = 2, + BottomRight = 3, + BottomLeft = 4, + LeftTop = 5, + RightTop = 6, + RightBottom = 7, + LftBottom = 8 + } + + ///----------------------------------------------------------------------------- + /// + /// Exposure programs + /// + /// + /// + /// [altair] 10.9.2003 Created + /// + ///----------------------------------------------------------------------------- + public enum ExposurePrograms + { + Manual = 1, + Normal = 2, + AperturePriority = 3, + ShutterPriority = 4, + Creative = 5, + Action = 6, + Portrait = 7, + Landscape = 8 + } + + ///----------------------------------------------------------------------------- + /// + /// Exposure metering modes + /// + /// + /// + /// [altair] 10.9.2003 Created + /// + ///----------------------------------------------------------------------------- + public enum ExposureMeteringModes + { + Unknown = 0, + Average = 1, + CenterWeightedAverage = 2, + Spot = 3, + MultiSpot = 4, + MultiSegment = 5, + Partial = 6, + Other = 255 + } + + ///----------------------------------------------------------------------------- + /// + /// Flash activity modes + /// + /// + /// + /// [altair] 10.9.2003 Created + /// + ///----------------------------------------------------------------------------- + public enum FlashModes + { + NotFired = 0, + Fired = 1, + FiredButNoStrobeReturned = 5, + FiredAndStrobeReturned = 7 + } + + ///----------------------------------------------------------------------------- + /// + /// Possible light sources (white balance) + /// + /// + /// + /// [altair] 10.9.2003 Created + /// + ///----------------------------------------------------------------------------- + public enum LightSources + { + Unknown = 0, + Daylight = 1, + Fluorescent = 2, + Tungsten = 3, + Flash = 10, + StandardLightA = 17, + StandardLightB = 18, + StandardLightC = 19, + D55 = 20, + D65 = 21, + D75 = 22, + Other = 255 + } + + ///----------------------------------------------------------------------------- + /// + /// Represents rational which is type of some Exif properties + /// + /// + /// + /// [altair] 10.9.2003 Created + /// + ///----------------------------------------------------------------------------- + public struct Rational + { + public Int32 Numerator; + + public Int32 Denominator; + ///----------------------------------------------------------------------------- + /// + /// Converts rational to string representation + /// + /// Optional, default "/". String to be used as delimiter of components. + /// String representation of the rational. + /// + /// + /// [altair] 10.9.2003 Created + /// + ///----------------------------------------------------------------------------- + public new string ToString(string Delimiter = "/") + { + return Numerator + Delimiter + Denominator; + } + + ///----------------------------------------------------------------------------- + /// + /// Converts rational to double precision real number + /// + /// The rational as double precision real number. + /// + /// + /// [altair] 10.9.2003 Created + /// + ///----------------------------------------------------------------------------- + public double ToDouble() + { + return Numerator / Denominator; + } + } + + ///----------------------------------------------------------------------------- + /// + /// Initializes new instance of this class. + /// + /// Bitmap to read exif information from + /// + /// + /// [altair] 10.9.2003 Created + /// + ///----------------------------------------------------------------------------- + public ExifReader(System.Drawing.Bitmap Bitmap) + { + if (Bitmap == null) + throw new ArgumentNullException("Bitmap"); + this.Image = Bitmap; + } + + ///----------------------------------------------------------------------------- + /// + /// Returns all available data in formatted string form + /// + /// + /// + /// + /// [altair] 10.9.2003 Created + /// + ///----------------------------------------------------------------------------- + public override string ToString() + { + System.Text.StringBuilder SB = new System.Text.StringBuilder(); + + SB.Append("Image:"); + SB.Append("\\n\\tDimensions: " + this.Width + " x " + this.Height + " px"); + SB.Append("\\n\\tResolution: " + this.ResolutionX + " x " + this.ResolutionY + " dpi"); + SB.Append("\\n\\tOrientation: " + Enum.GetName(typeof(Orientations), this.Orientation)); + SB.Append("\\n\\tTitle: " + this.Title); + SB.Append("\\n\\tDescription: " + this.Description); + SB.Append("\\n\\tCopyright: " + this.Copyright); + SB.Append("\\nEquipment:"); + SB.Append("\\n\\tMaker: " + this.EquipmentMaker); + SB.Append("\\n\\tModel: " + this.EquipmentModel); + SB.Append("\\n\\tSoftware: " + this.Software); + SB.Append("\\nDate and time:"); + SB.Append("\\n\\tGeneral: " + this.DateTimeLastModified.ToString()); + SB.Append("\\n\\tOriginal: " + this.DateTimeOriginal.ToString()); + SB.Append("\\n\\tDigitized: " + this.DateTimeDigitized.ToString()); + SB.Append("\\nShooting conditions:"); + SB.Append("\\n\\tExposure time: " + this.ExposureTime.ToString("N4") + " s"); + SB.Append("\\n\\tExposure program: " + Enum.GetName(typeof(ExposurePrograms), this.ExposureProgram)); + SB.Append("\\n\\tExposure mode: " + Enum.GetName(typeof(ExposureMeteringModes), this.ExposureMeteringMode)); + SB.Append("\\n\\tAperture: F" + this.Aperture.ToString("N2")); + SB.Append("\\n\\tISO sensitivity: " + this.ISO); + SB.Append("\\n\\tSubject distance: " + this.SubjectDistance.ToString("N2") + " m"); + SB.Append("\\n\\tFocal length: " + this.FocalLength); + SB.Append("\\n\\tFlash: " + Enum.GetName(typeof(FlashModes), this.FlashMode)); + SB.Append("\\n\\tLight source (WB): " + Enum.GetName(typeof(LightSources), this.LightSource)); + SB.Append("\\n\\nCopyright (c) Michal A. Valasek - Altair Communications, 2003"); + SB.Append("\\nhttp://software.altaircom.net * support@altaircom.net"); + + SB.Replace("\\n", System.Environment.NewLine); + SB.Replace("\\t", "\t"); + return SB.ToString(); + } + + ///----------------------------------------------------------------------------- + /// + /// Brand of equipment (EXIF EquipMake) + /// + /// + /// + /// + /// [altair] 10.9.2003 Created + /// + ///----------------------------------------------------------------------------- + public string EquipmentMaker + { + get { return this.GetPropertyString((int)TagNames.EquipMake); } + } + + ///----------------------------------------------------------------------------- + /// + /// Model of equipment (EXIF EquipModel) + /// + /// + /// + /// + /// [altair] 10.9.2003 Created + /// + ///----------------------------------------------------------------------------- + public string EquipmentModel + { + get { return this.GetPropertyString((int)TagNames.EquipModel); } + } + + ///----------------------------------------------------------------------------- + /// + /// Software used for processing (EXIF Software) + /// + /// + /// + /// + /// [altair] 10.9.2003 Created + /// + ///----------------------------------------------------------------------------- + public string Software + { + get { return this.GetPropertyString((int)TagNames.SoftwareUsed); } + } + + ///----------------------------------------------------------------------------- + /// + /// Orientation of image (position of row 0, column 0) (EXIF Orientation) + /// + /// + /// + /// + /// [altair] 10.9.2003 Created + /// + ///----------------------------------------------------------------------------- + public Orientations Orientation + { + get + { + Int32 X = this.GetPropertyInt16((int)TagNames.Orientation); + + if (!Enum.IsDefined(typeof(Orientations), X)) + { + return Orientations.TopLeft; + } + else + { + return (Orientations)Enum.Parse(typeof(Orientations), Enum.GetName(typeof(Orientations), X)); + } + } + } + + ///----------------------------------------------------------------------------- + /// + /// Time when image was last modified (EXIF DateTime). + /// + /// + /// + /// + /// [altair] 10.9.2003 Created + /// + ///----------------------------------------------------------------------------- + public DateTime DateTimeLastModified + { + get + { + try + { + return DateTime.ParseExact(this.GetPropertyString((int)TagNames.DateTime), "yyyy\\:MM\\:dd HH\\:mm\\:ss", null); + } + catch (Exception ex) + { + return DateTime.MinValue; + } + } + } + + ///----------------------------------------------------------------------------- + /// + /// Time when image was taken (EXIF DateTimeOriginal). + /// + /// + /// + /// + /// [altair] 10.9.2003 Created + /// + ///----------------------------------------------------------------------------- + public DateTime DateTimeOriginal + { + get + { + try + { + return DateTime.ParseExact(this.GetPropertyString((int)TagNames.ExifDTOrig), "yyyy\\:MM\\:dd HH\\:mm\\:ss", null); + } + catch (Exception ex) + { + return DateTime.MinValue; + } + } + } + + ///----------------------------------------------------------------------------- + /// + /// Time when image was digitized (EXIF DateTimeDigitized). + /// + /// + /// + /// + /// [altair] 10.9.2003 Created + /// + ///----------------------------------------------------------------------------- + public DateTime DateTimeDigitized + { + get + { + try + { + return DateTime.ParseExact(this.GetPropertyString((int)TagNames.ExifDTDigitized), "yyyy\\:MM\\:dd HH\\:mm\\:ss", null); + } + catch (Exception ex) + { + return DateTime.MinValue; + } + } + } + + ///----------------------------------------------------------------------------- + /// + /// Image width + /// + /// + /// + /// + /// [altair] 10.9.2003 Created + /// + ///----------------------------------------------------------------------------- + public Int16 Width + { + get { return this.GetPropertyInt16((int)TagNames.ImageWidth); } + } + + ///----------------------------------------------------------------------------- + /// + /// Image height + /// + /// + /// + /// + /// [altair] 10.9.2003 Created + /// + ///----------------------------------------------------------------------------- + public Int16 Height + { + get { return this.GetPropertyInt16((int)TagNames.ImageHeight); } + } + + ///----------------------------------------------------------------------------- + /// + /// X resolution in dpi (EXIF XResolution/ResolutionUnit) + /// + /// + /// + /// + /// [altair] 10.9.2003 Created + /// + ///----------------------------------------------------------------------------- + public double ResolutionX + { + get + { + double R = this.GetPropertyRational((int)TagNames.XResolution).ToDouble(); + + if (this.GetPropertyInt16((int)TagNames.ResolutionUnit) == 3) + { + //-- resolution is in points/cm + return R * 2.54; + } + else + { + //-- resolution is in points/inch + return R; + } + } + } + + ///----------------------------------------------------------------------------- + /// + /// Y resolution in dpi (EXIF YResolution/ResolutionUnit) + /// + /// + /// + /// + /// [altair] 10.9.2003 Created + /// + ///----------------------------------------------------------------------------- + public double ResolutionY + { + get + { + double R = this.GetPropertyRational((int)TagNames.YResolution).ToDouble(); + + if (this.GetPropertyInt16((int)TagNames.ResolutionUnit) == 3) + { + //-- resolution is in points/cm + return R * 2.54; + } + else + { + //-- resolution is in points/inch + return R; + } + } + } + + ///----------------------------------------------------------------------------- + /// + /// Image title (EXIF ImageTitle) + /// + /// + /// + /// + /// [altair] 10.9.2003 Created + /// + ///----------------------------------------------------------------------------- + public string Title + { + get { return this.GetPropertyString((int)TagNames.ImageTitle); } + } + + ///----------------------------------------------------------------------------- + /// + /// Image description (EXIF ImageDescription) + /// + /// + /// + /// + /// [altair] 10.9.2003 Created + /// + ///----------------------------------------------------------------------------- + public string Description + { + get { return this.GetPropertyString((int)TagNames.ImageDescription); } + } + + ///----------------------------------------------------------------------------- + /// + /// Image copyright (EXIF Copyright) + /// + /// + /// + /// + /// [altair] 10.9.2003 Created + /// + ///----------------------------------------------------------------------------- + public string Copyright + { + get { return this.GetPropertyString((int)TagNames.Copyright); } + } + + ///----------------------------------------------------------------------------- + /// + /// Exposure time in seconds (EXIF ExifExposureTime/ExifShutterSpeed) + /// + /// + /// + /// + /// [altair] 10.9.2003 Created + /// + ///----------------------------------------------------------------------------- + public double ExposureTime + { + get + { + if (this.IsPropertyDefined((int)TagNames.ExifExposureTime)) + { + //-- Exposure time is explicitly specified + return this.GetPropertyRational((int)TagNames.ExifExposureTime).ToDouble(); + } + else if (this.IsPropertyDefined((int)TagNames.ExifShutterSpeed)) + { + //-- Compute exposure time from shutter speed + return 1 / (Math.Pow(2, this.GetPropertyRational((int)TagNames.ExifShutterSpeed).ToDouble())); + } + else + { + //-- Can't figure out + return 0; + } + } + } + + ///----------------------------------------------------------------------------- + /// + /// Aperture value as F number (EXIF ExifFNumber/ExifApertureValue) + /// + /// + /// + /// + /// [altair] 10.9.2003 Created + /// + ///----------------------------------------------------------------------------- + public double Aperture + { + get + { + if (this.IsPropertyDefined((int)TagNames.ExifFNumber)) + { + return this.GetPropertyRational((int)TagNames.ExifFNumber).ToDouble(); + } + else if (this.IsPropertyDefined((int)TagNames.ExifAperture)) + { + return Math.Pow(System.Math.Sqrt(2), this.GetPropertyRational((int)TagNames.ExifAperture).ToDouble()); + } + else + { + return 0; + } + } + } + + ///----------------------------------------------------------------------------- + /// + /// Exposure program used (EXIF ExifExposureProg) + /// + /// + /// If not specified, returns Normal (2) + /// + /// [altair] 10.9.2003 Created + /// + ///----------------------------------------------------------------------------- + public ExposurePrograms ExposureProgram + { + get + { + Int32 X = this.GetPropertyInt16((int)TagNames.ExifExposureProg); + + if (Enum.IsDefined(typeof(ExposurePrograms), X)) + { + return (ExposurePrograms)Enum.Parse(typeof(ExposurePrograms), Enum.GetName(typeof(ExposurePrograms), X)); + } + else + { + return ExposurePrograms.Normal; + } + } + } + + ///----------------------------------------------------------------------------- + /// + /// ISO sensitivity + /// + /// + /// + /// + /// [altair] 10.9.2003 Created + /// + ///----------------------------------------------------------------------------- + public Int16 ISO + { + get { return this.GetPropertyInt16((int)TagNames.ExifISOSpeed); } + } + + ///----------------------------------------------------------------------------- + /// + /// Subject distance in meters (EXIF SubjectDistance) + /// + /// + /// + /// + /// [altair] 10.9.2003 Created + /// + ///----------------------------------------------------------------------------- + public double SubjectDistance + { + get { return this.GetPropertyRational((int)TagNames.ExifSubjectDist).ToDouble(); } + } + + ///----------------------------------------------------------------------------- + /// + /// Exposure method metering mode used (EXIF MeteringMode) + /// + /// + /// If not specified, returns Unknown (0) + /// + /// [altair] 10.9.2003 Created + /// + ///----------------------------------------------------------------------------- + public ExposureMeteringModes ExposureMeteringMode + { + get + { + Int32 X = this.GetPropertyInt16((int)TagNames.ExifMeteringMode); + + if (Enum.IsDefined(typeof(ExposureMeteringModes), X)) + { + return (ExposureMeteringModes)Enum.Parse(typeof(ExposureMeteringModes), Enum.GetName(typeof(ExposureMeteringModes), X)); + } + else + { + return ExposureMeteringModes.Unknown; + } + } + } + + ///----------------------------------------------------------------------------- + /// + /// Focal length of lenses in mm (EXIF FocalLength) + /// + /// + /// + /// + /// [altair] 10.9.2003 Created + /// + ///----------------------------------------------------------------------------- + public double FocalLength + { + get { return this.GetPropertyRational((int)TagNames.ExifFocalLength).ToDouble(); } + } + + ///----------------------------------------------------------------------------- + /// + /// Flash mode (EXIF Flash) + /// + /// + /// If not present, value NotFired (0) is returned + /// + /// [altair] 10.9.2003 Created + /// + ///----------------------------------------------------------------------------- + public FlashModes FlashMode + { + get + { + Int32 X = this.GetPropertyInt16((int)TagNames.ExifFlash); + + if (Enum.IsDefined(typeof(FlashModes), X)) + { + return (FlashModes)Enum.Parse(typeof(FlashModes), Enum.GetName(typeof(FlashModes), X)); + } + else + { + return FlashModes.NotFired; + } + } + } + + ///----------------------------------------------------------------------------- + /// + /// Light source / white balance (EXIF LightSource) + /// + /// + /// If not specified, returns Unknown (0). + /// + /// [altair] 10.9.2003 Created + /// + ///----------------------------------------------------------------------------- + public LightSources LightSource + { + get + { + Int32 X = this.GetPropertyInt16((int)TagNames.ExifLightSource); + + if (Enum.IsDefined(typeof(LightSources), X)) + { + return (LightSources)Enum.Parse(typeof(LightSources), Enum.GetName(typeof(LightSources), X)); + } + else + { + return LightSources.Unknown; + } + } + } + + ///----------------------------------------------------------------------------- + /// + /// Checks if current image has specified certain property + /// + /// + /// True if image has specified property, False otherwise. + /// + /// + /// [altair] 10.9.2003 Created + /// + ///----------------------------------------------------------------------------- + public bool IsPropertyDefined(Int32 PID) + { + return Convert.ToBoolean(Array.IndexOf(this.Image.PropertyIdList, PID) > -1); + } + + ///----------------------------------------------------------------------------- + /// + /// Gets specified Int32 property + /// + /// Property ID + /// Optional, default 0. Default value returned if property is not present. + /// Value of property or DefaultValue if property is not present. + /// + /// [altair] 10.9.2003 Created + /// + ///----------------------------------------------------------------------------- + public Int32 GetPropertyInt32(Int32 PID, Int32 DefaultValue = 0) + { + if (this.IsPropertyDefined(PID)) + { + return GetInt32(this.Image.GetPropertyItem(PID).Value); + } + else + { + return DefaultValue; + } + } + + ///----------------------------------------------------------------------------- + /// + /// Gets specified Int16 property + /// + /// Property ID + /// Optional, default 0. Default value returned if property is not present. + /// Value of property or DefaultValue if property is not present. + /// + /// [altair] 10.9.2003 Created + /// + ///----------------------------------------------------------------------------- + public Int16 GetPropertyInt16(Int32 PID, Int16 DefaultValue = 0) + { + if (this.IsPropertyDefined(PID)) + { + return GetInt16(this.Image.GetPropertyItem(PID).Value); + } + else + { + return DefaultValue; + } + } + + ///----------------------------------------------------------------------------- + /// + /// Gets specified string property + /// + /// Property ID + /// Optional, default String.Empty. Default value returned if property is not present. + /// + /// Value of property or DefaultValue if property is not present. + /// + /// [altair] 10.9.2003 Created + /// + ///----------------------------------------------------------------------------- + public string GetPropertyString(Int32 PID, string DefaultValue = "") + { + if (this.IsPropertyDefined(PID)) + { + return GetString(this.Image.GetPropertyItem(PID).Value); + } + else + { + return DefaultValue; + } + } + + ///----------------------------------------------------------------------------- + /// + /// Gets specified rational property + /// + /// Property ID + /// + /// Value of property or 0/1 if not present. + /// + /// [altair] 10.9.2003 Created + /// + ///----------------------------------------------------------------------------- + public Rational GetPropertyRational(Int32 PID) + { + if (this.IsPropertyDefined(PID)) + { + return GetRational(this.Image.GetPropertyItem(PID).Value); + } + else + { + Rational R = default(Rational); + R.Numerator = 0; + R.Denominator = 1; + return R; + } + } + + ///----------------------------------------------------------------------------- + /// + /// Reads Int32 from EXIF bytearray. + /// + /// EXIF bytearray to process + /// + /// + /// + /// [altair] 10.9.2003 Created + /// + ///----------------------------------------------------------------------------- + public static Int32 GetInt32(byte[] B) + { + if (B.Length < 4) + throw new ArgumentException("Data too short (4 bytes expected)", "B"); + return B[3] << 24 | B[2] << 16 | B[1] << 8 | B[0]; + } + + ///----------------------------------------------------------------------------- + /// + /// Reads Int16 from EXIF bytearray. + /// + /// EXIF bytearray to process + /// + /// + /// + /// [altair] 10.9.2003 Created + /// + ///----------------------------------------------------------------------------- + public static Int16 GetInt16(byte[] B) + { + if (B.Length < 2) + throw new ArgumentException("Data too short (2 bytes expected)", "B"); + return Convert.ToInt16(B[1] << 8 | B[0]); + } + + ///----------------------------------------------------------------------------- + /// + /// Reads string from EXIF bytearray. + /// + /// EXIF bytearray to process + /// + /// + /// + /// [altair] 10.9.2003 Created + /// + ///----------------------------------------------------------------------------- + public static string GetString(byte[] B) + { + string R = System.Text.Encoding.ASCII.GetString(B); + if (R.EndsWith(string.Empty)) + R = R.Substring(0, R.Length - 1); + return R; + } + + ///----------------------------------------------------------------------------- + /// + /// Reads rational from EXIF bytearray. + /// + /// EXIF bytearray to process + /// + /// + /// + /// [altair] 10.9.2003 Created + /// + ///----------------------------------------------------------------------------- + public static Rational GetRational(byte[] B) + { + Rational R = new Rational(); + byte[] N = new byte[4]; + byte[] D = new byte[4]; + Array.Copy(B, 0, N, 0, 4); + Array.Copy(B, 4, D, 0, 4); + R.Denominator = GetInt32(D); + R.Numerator = GetInt32(N); + return R; + } + + ///----------------------------------------------------------------------------- + /// + /// Disposes unmanaged resources of this class + /// + /// + /// + /// [altair] 10.9.2003 Created + /// + ///----------------------------------------------------------------------------- + public void Dispose() + { + this.Image.Dispose(); + } +} \ No newline at end of file diff --git a/ImageCatalogCS/FileHelper.cs b/ImageCatalogCS/FileHelper.cs new file mode 100644 index 0000000..0e68384 --- /dev/null +++ b/ImageCatalogCS/FileHelper.cs @@ -0,0 +1,173 @@ +using Microsoft.VisualBasic; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Data; +using System.Diagnostics; +using System.IO; + +public class FileHelper +{ + //Private dirSourceDest As Dictionary(Of FileInfo, DirectoryInfo) + private int filesPerFolder; + private string suffix; + private int counterSize; + private int numerationType; + private string filter; + private bool separateFiles; + + private string extensions = "*.jpg,*.png,*.gif"; + + public enum numerazione + { + Progressiva, + Files + } + /// + /// Preparazione per la separazione + /// + /// + /// + /// + /// + /// + public FileHelper(int filesPerFolder, string suffix, int counterSize, int numerationType) + { + this.filesPerFolder = filesPerFolder; + this.suffix = suffix; + this.counterSize = counterSize; + this.numerationType = numerationType; + this.separateFiles = true; + } + + /// + /// nessuna separazione + /// + /// + public FileHelper() + { + this.separateFiles = false; + } + + + public Dictionary GetFilesRecursive(DirectoryInfo root, DirectoryInfo destRoot, string filter) + { + Dictionary dirSourceDest = new Dictionary(); + List result = new List(); + + //Dim stack As New Stack(Of DirectoryInfo) + Stack> stack = new Stack>(); + + + this.filter = filter; + KeyValuePair pair = new KeyValuePair(); + + + //stack.Push(root) + stack.Push(new KeyValuePair(root, destRoot)); + + while ((stack.Count > 0)) + { + KeyValuePair curDirKV = stack.Pop(); + //curDirKP = stack.Pop() + DirectoryInfo dir = curDirKV.Key; + DirectoryInfo dDir = curDirKV.Value; + try + { + //result.AddRange(dir.GetFiles(filter, SearchOption.TopDirectoryOnly)) + // dividere file qui + if (filesPerFolder > 0 & separateFiles) + { + appendDictionary(dirSourceDest, dividiFilesInDir(dir, dDir)); + } + else + { + appendDictionary(dirSourceDest, getAllFilesInDir(dir, dDir)); + } + + + + foreach (DirectoryInfo subDirectory in dir.GetDirectories()) + { + stack.Push(new KeyValuePair(subDirectory, new DirectoryInfo(Path.Combine(dDir.FullName, subDirectory.Name)))); + + } + + } + catch (Exception ex) + { + } + } + + return dirSourceDest; + } + + public Dictionary appendDictionary(Dictionary dictA, Dictionary dictB) + { + foreach (KeyValuePair pair in dictB) + { + dictA.Add(pair.Key, pair.Value); + } + return dictA; + } + + public Dictionary getAllFilesInDir(DirectoryInfo dir, DirectoryInfo dirDest) + { + Dictionary dict = new Dictionary(); + foreach (FileInfo File in dir.GetFiles(filter)) + { + dict.Add(File, new DirectoryInfo(Path.Combine(dirDest.FullName, File.Name))); + + } + return dict; + } + + private Dictionary dividiFilesInDir(DirectoryInfo dir, DirectoryInfo dirDest) + { + int filesCount = dir.GetFiles(filter).Length; + int contaFilePerDir = 0; + int contaDirPerDir = 0; + string tempText = string.Empty; + Dictionary foldersDict = new Dictionary(); + + DirectoryInfo destDir = null; + destDir = new DirectoryInfo(Path.Combine(dirDest.FullName)); + + foreach (FileInfo file in dir.GetFiles(filter)) + { + contaFilePerDir += 1; + + if (contaFilePerDir == (contaDirPerDir * filesPerFolder) + 1) + { + contaDirPerDir += 1; + + if (numerazione.Progressiva.Equals(numerationType)) + { + tempText = contaDirPerDir.ToString(); + } + else + { + tempText = (contaDirPerDir * filesPerFolder).ToString(); + } + int i = 0; + for (i = 1; i <= (counterSize - tempText.Length); i++) + { + tempText = "0" + tempText; + } + destDir = new DirectoryInfo(Path.Combine(dirDest.FullName, suffix + tempText)); + + + + } + + if (!destDir.Exists) + { + destDir.Create(); + } + + foldersDict.Add(file, destDir); + } + + return foldersDict; + } +} \ No newline at end of file diff --git a/ImageCatalogCS/ImageCatalog 3.csproj b/ImageCatalogCS/ImageCatalog 3.csproj new file mode 100644 index 0000000..e134fca --- /dev/null +++ b/ImageCatalogCS/ImageCatalog 3.csproj @@ -0,0 +1,110 @@ + + + + + Debug + AnyCPU + {D11ED7B0-93E8-4F38-A142-EED72D7EE8B5} + WinExe + Properties + ImageCatalogCS + ImageCatalogCS + v4.5 + 512 + SAK + SAK + SAK + SAK + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + Form + + + AboutForm.cs + + + + + + + Form + + + MainForm.cs + + + + + + + + + AboutForm.cs + + + MainForm.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + \ No newline at end of file diff --git a/ImageCatalogCS/ImageCreator.cs b/ImageCatalogCS/ImageCreator.cs new file mode 100644 index 0000000..3c03533 --- /dev/null +++ b/ImageCatalogCS/ImageCreator.cs @@ -0,0 +1,1057 @@ +using Microsoft.VisualBasic; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Data; +using System.Diagnostics; +using System.IO; +using System.Drawing.Drawing2D; +using System.Drawing.Imaging; +using System.Drawing; +using ImageCatalogCS; +using System.Windows.Forms; +//using System.Drawing; +//Imports System.Threading + +public class ImageCreator +{ + #region "dichiarazioni" + + + private bool FotoRuotaADestra = false; + + private bool FotoRuotaASinistra = false; + private string TempMinText = ""; + //Private crFont1 As Font + + private string _NomeFileChild; + private DirectoryInfo _SourceDir; + private DirectoryInfo _DestDirStart; + + private DirectoryInfo _DestDir; + + private FileInfo _workFile; + private string testoFirma; + private string testoFirmaV; + private int alphaScelta; + private int DimensioneStandard; + private int DimensioneStandardMiniatura; + private DateTime dataFoto; + private DateTime dataPartenzaI; + private string testoOrario; + private string testoFirmaPiccola; + private Size thumbSizeSmall; + private Size thumbSizeBig; + private string nomeFileSmall; + private string nomeFileBig; + + private string nomeFileBig2; + private float yPosFromBottom; + private float yPosFromBottom1; + private float yPosFromBottom2; + private float yPosFromBottom3; + + private float yPosFromBottom4; + + #endregion + public ImageCreator() + { + } + + public ImageCreator(string nomeFileChild, DirectoryInfo sourceDir, DirectoryInfo destDir, DirectoryInfo destDirStart) + { + this._NomeFileChild = nomeFileChild; + this._SourceDir = sourceDir; + this._DestDir = destDir; + this._DestDirStart = destDirStart; + this._workFile = new FileInfo(nomeFileChild); + } + + public ImageCreator(string nomeFileChild, DirectoryInfo sourceDir, DirectoryInfo destDir) + { + this._NomeFileChild = nomeFileChild; + this._DestDir = destDir; + } + + public ImageCreator(FileInfo file, DirectoryInfo destination) + { + this._workFile = file; + this._DestDir = destination; + + } + + + + public void CreaImmagineThread(string Info) + { + + try + { + preparaVariabili(); + //Dim g As System.Drawing.Image = System.Drawing.Image.FromFile(Path.Combine(SourceDir.FullName, NomeFileChild)) + System.Drawing.Image g = System.Drawing.Image.FromFile(WorkFile.FullName); + + // Imposta testo extra + impostaTestoExtra(g); + + // Ruota l'immagine in base ai dati EXIF + Rotation(ref g); + + // Forza jpeg se è selezionata l'opzione + System.Drawing.Imaging.ImageFormat thisFormat = g.RawFormat; + if (PicSettings.UsaForzaJpg == true) + thisFormat = System.Drawing.Imaging.ImageFormat.Jpeg; + + prepareThumbnailSize(g); + + Bitmap imgOutputBig = new Bitmap(g, thumbSizeBig.Width, thumbSizeBig.Height); + imgOutputBig.SetResolution(g.HorizontalResolution, g.VerticalResolution); + + // Crea le miniature + creaMiniature(g, imgOutputBig, thisFormat); + + aggiungiTesto(g, imgOutputBig); + + aggiungiLogo(imgOutputBig); + + salvaFoto(imgOutputBig, thumbSizeBig, nomeFileBig, nomeFileSmall, thumbSizeSmall, thisFormat); + + g.Dispose(); + + GC.Collect(); + + //PicSettings.mainForm.stepProgressBar(); + + + } + catch (Exception ex) + { + + MessageBox.Show(ex.Message); + + + } + + + + } + + + private void Rotation(ref System.Drawing.Image g) + { + FotoRuotaADestra = false; + FotoRuotaASinistra = false; + + if (PicSettings.UsaRotazioneAutomatica) + { + // ci sono dati exif + if (g.PropertyIdList.Length > 0) + { + ExifReader DatiExif = new ExifReader((Bitmap)g); + + switch (DatiExif.Orientation) + { + case ExifReader.Orientations.BottomLeft: + + break; + case ExifReader.Orientations.BottomRight: + + break; + case ExifReader.Orientations.LeftTop: + + break; + case ExifReader.Orientations.LftBottom: + FotoRuotaASinistra = true; + break; + case ExifReader.Orientations.RightBottom: + + break; + case ExifReader.Orientations.RightTop: + + break; + case ExifReader.Orientations.TopLeft: + + break; + case ExifReader.Orientations.TopRight: + + break; + } + } + } + + if (FotoRuotaASinistra == true) + { + g.RotateFlip(RotateFlipType.Rotate270FlipNone); + } + if (FotoRuotaADestra == true) + { + g.RotateFlip(RotateFlipType.Rotate90FlipNone); + } + + + + } + /// + /// Aggiunge Orario, tempo gara e altri + /// + /// Image + /// + private void impostaTestoExtra(Image g) + { + + if (PicSettings.UsaOrarioTestoApplicare | PicSettings.UsaTempoGaraTestoApplicare | PicSettings.UsaOrarioMiniatura | PicSettings.TestoMin | PicSettings.AggTempoGaraMin | PicSettings.AggNumTempMin) + { + // ci sono dati exif + if (g.PropertyIdList.Length > 0) + { + ExifReader DatiExif = new ExifReader((Bitmap)g); + dataFoto = DatiExif.DateTimeOriginal; + testoFirma = PicSettings.TestoFirmaStart; + testoFirmaV = PicSettings.TestoFirmaStartV; + + if (dataFoto.Year != 1) + { + testoFirmaPiccola = dataFoto.ToShortTimeString(); + if (PicSettings.UsaOrarioTestoApplicare == true) + { + testoFirma += " " + dataFoto.ToShortDateString() + " " + dataFoto.ToLongTimeString(); + testoFirmaV += " " + dataFoto.ToShortDateString() + " " + dataFoto.ToLongTimeString(); + } + if (PicSettings.UsaTempoGaraTestoApplicare == true) + { + TimeSpan Orario = dataFoto.Subtract(dataPartenzaI); + + + //TimeSpan Orario = new TimeSpan( DateAndTime.DateDiff(DateInterval.Second, dataPartenzaI, dataFoto) * 10000000); + testoFirma += " " + testoOrario + Orario.Hours.ToString("00") + ":" + Orario.Minutes.ToString("00") + ":" + Orario.Seconds.ToString("00"); + testoFirmaV += " " + testoOrario + Orario.Hours.ToString("00") + ":" + Orario.Minutes.ToString("00") + ":" + Orario.Seconds.ToString("00"); + } + } + + } + } + else + { + testoFirma = PicSettings.TestoFirmaStart; + testoFirmaV = PicSettings.TestoFirmaStartV; + + } + } + + /// + /// Prepara diverse variabili azzerandole, elaborandole e prendendole dalle impostazioni + /// + /// + private void preparaVariabili() + { + alphaScelta = Convert.ToInt32((255 * (100 - PicSettings.Trasparenza) / 100)); + testoFirma = ""; + testoFirmaV = ""; + dataPartenzaI = PicSettings.DataPartenza; + testoOrario = PicSettings.TestoOrario; + if (testoOrario.Length > 0) + testoOrario += " "; + testoFirmaPiccola = ""; + thumbSizeSmall = new Size(); + thumbSizeBig = new Size(); + nomeFileSmall = ""; + nomeFileBig2 = ""; + nomeFileBig = ""; + DimensioneStandard = PicSettings.dimStandard; + DimensioneStandardMiniatura = PicSettings.dimStandardMiniatura; + //nomeFileSmall = Suffisso & NomeFileChild + //nomeFileBig = NomeFileChild + nomeFileSmall = PicSettings.Suffisso + WorkFile.Name; + nomeFileBig = WorkFile.Name; + } + + private void prepareThumbnailSize(Image g) + { + if (g.Width > g.Height) + { + thumbSizeSmall = NewthumbSize(g.Width, g.Height, PicSettings.LarghezzaSmall, "Larghezza"); + Size SizeOrig = new Size(g.Width, g.Height); + thumbSizeBig = SizeOrig; + } + else + { + thumbSizeSmall = NewthumbSize(g.Width, g.Height, PicSettings.AltezzaSmall, "Altezza"); + Size SizeOrig = new Size(g.Width, g.Height); + thumbSizeBig = SizeOrig; + } + } + + private void creaMiniature(Image g, Bitmap imgOutputBig, ImageFormat thisFormat) + { + if (PicSettings.TestoMin) + { + testoFirmaPiccola = nomeFileBig; + } + else if (PicSettings.AggNumTempMin) + { + testoFirmaPiccola = nomeFileBig + " "; + } + //Dim yPosFromBottom4 As Single + + Font crFont1 = null; + Font crFont2 = null; + SizeF crSize1 = new SizeF(); + SizeF crSize2 = new SizeF(); + + if (PicSettings.CreaMiniature == true) + { + if (PicSettings.AggiungiScritteMiniature == false) + { + if (string.Equals(PicSettings.directorySorgente.ToUpper(), + PicSettings.directoryDestinazione.ToUpper())) + { + nomeFileSmall = nomeFileSmall.Substring(0, nomeFileSmall.Length - 4) + PicSettings.Codice + nomeFileSmall.Substring(nomeFileSmall.Length - 4); + } + + if (PicSettings.UsaOrarioMiniatura | PicSettings.TestoMin | PicSettings.AggTempoGaraMin | PicSettings.AggNumTempMin) + { + if (testoFirmaPiccola.Length > 0) + { + Bitmap imgOutputSmall = default(Bitmap); + imgOutputSmall = (Bitmap)imgOutputBig.Clone(); + + Graphics grPhoto1 = default(Graphics); + grPhoto1 = Graphics.FromImage(imgOutputSmall); + grPhoto1.SmoothingMode = SmoothingMode.AntiAlias; + + int LarghezzaStandard1 = 0; + //quick fix + DimensioneStandardMiniatura = 50; + if (PicSettings.Grassetto == true) + { + crFont1 = new Font(PicSettings.IlFont, DimensioneStandardMiniatura, FontStyle.Bold); + crFont2 = new Font(PicSettings.IlFont, DimensioneStandard, FontStyle.Bold); + } + else + { + crFont1 = new Font(PicSettings.IlFont, DimensioneStandardMiniatura); + crFont2 = new Font(PicSettings.IlFont, DimensioneStandard); + } + + crSize1 = grPhoto1.MeasureString(testoFirmaPiccola, crFont1); + crSize2 = grPhoto1.MeasureString(testoFirma, crFont1); + LarghezzaStandard1 = Convert.ToInt32(crSize1.Width); + + if (crSize1.Width > Convert.ToSingle(g.Width)) + { + int Conta = DimensioneStandardMiniatura; + do + { + if (Conta > 20) + { + Conta -= 5; + } + else + { + Conta -= 1; + } + if (PicSettings.Grassetto == true) + { + crFont1 = new Font(PicSettings.IlFont, Conta, FontStyle.Bold); + } + else + { + crFont1 = new Font(PicSettings.IlFont, Conta); + } + crSize1 = grPhoto1.MeasureString(testoFirmaPiccola, crFont1); + if (crSize1.Width < Convert.ToSingle(g.Width)) + { + LarghezzaStandard1 = Convert.ToInt32(crSize1.Width); + break; // TODO: might not be correct. Was : Exit Do + } + if (Conta <= 5) + break; // TODO: might not be correct. Was : Exit Do + } while (true); + DimensioneStandardMiniatura = Conta; + } + + switch (PicSettings.Posizione.ToUpper()) + { + case "ALTO": + yPosFromBottom1 = (PicSettings.Margine); + yPosFromBottom4 = (PicSettings.margVert); + + break; + case "BASSO": + yPosFromBottom1 = Convert.ToSingle((g.Height - crSize1.Height - (g.Height * PicSettings.Margine / 100))); + yPosFromBottom4 = Convert.ToSingle((g.Height - crSize1.Height - (g.Height * PicSettings.margVert / 100))); + + break; + } + + float xCenterOfImg1 = 0; + + StringFormat StrFormat1 = new StringFormat(); + switch (PicSettings.Allineamento.ToUpper()) + { + case "SINISTRA": + xCenterOfImg1 = Convert.ToSingle((PicSettings.Margine + (LarghezzaStandard1 / 2))); + + if ((LarghezzaStandard1 / 2) > (g.Width / 2) - PicSettings.Margine) + { + xCenterOfImg1 = Convert.ToSingle((g.Width / 2)); + } + + break; + + case "CENTRO": + xCenterOfImg1 = Convert.ToSingle((g.Width / 2)); + + break; + + case "DESTRA": + xCenterOfImg1 = Convert.ToSingle((g.Width - PicSettings.Margine - (LarghezzaStandard1 / 2))); + + if ((LarghezzaStandard1 / 2) > (g.Width / 2) - PicSettings.Margine) + { + xCenterOfImg1 = Convert.ToSingle((g.Width / 2)); + } + + break; + + } + StrFormat1.Alignment = StringAlignment.Center; + + SolidBrush semiTransBrush21 = new SolidBrush(Color.FromArgb(alphaScelta, 0, 0, 0)); + SolidBrush semiTransBrush1 = new SolidBrush(Color.FromArgb(alphaScelta, PicSettings.fontColoreRGB)); + + //quick fix + DimensioneStandardMiniatura = PicSettings.DimMin; + + if (PicSettings.Grassetto == true) + { + crFont1 = new Font(PicSettings.IlFont, DimensioneStandardMiniatura, FontStyle.Bold); + } + else + { + crFont1 = new Font(PicSettings.IlFont, DimensioneStandardMiniatura); + } + //asdgadfhdfhjgfsjgfjygfdhsdafa + 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 (PicSettings.AggTempoGaraMin & PicSettings.UsaTempoGaraTestoApplicare) + { + //TimeSpan Orario = new TimeSpan(DateAndTime.DateDiff(DateInterval.Second, dataPartenzaI, dataFoto) * 10000000); + TimeSpan Orario = dataFoto.Subtract(dataPartenzaI); + string tempstr = ""; + + + tempstr += Environment.NewLine + testoOrario + Orario.Hours.ToString("00") + ":" + Orario.Minutes.ToString("00") + ":" + Orario.Seconds.ToString("00"); + + + grPhoto1.DrawString(tempstr, crFont1, semiTransBrush21, new PointF(xCenterOfImg1 + 1, yPosFromBottom1 + 1), StrFormat1); + grPhoto1.DrawString(tempstr, crFont1, semiTransBrush1, new PointF(xCenterOfImg1, yPosFromBottom1), StrFormat1); + + } + else if (PicSettings.AggNumTempMin) + { + TimeSpan Orario = dataFoto.Subtract(dataPartenzaI); + //TimeSpan Orario = new TimeSpan(DateAndTime.DateDiff(DateInterval.Second, dataPartenzaI, dataFoto) * 10000000); + string tempstr = ""; + tempstr += nomeFileBig; + + tempstr += Environment.NewLine + testoOrario + Orario.Hours.ToString("00") + ":" + Orario.Minutes.ToString("00") + ":" + Orario.Seconds.ToString("00"); + + + grPhoto1.DrawString(tempstr, crFont1, semiTransBrush21, new PointF(xCenterOfImg1 + 1, yPosFromBottom1 + 1), StrFormat1); + grPhoto1.DrawString(tempstr, crFont1, semiTransBrush1, new PointF(xCenterOfImg1, yPosFromBottom1), StrFormat1); + + + } + else + { + grPhoto1.DrawString(testoFirmaPiccola, crFont1, semiTransBrush21, new PointF(xCenterOfImg1 + 1, yPosFromBottom1 + 1), StrFormat1); + grPhoto1.DrawString(testoFirmaPiccola, crFont1, semiTransBrush1, new PointF(xCenterOfImg1, yPosFromBottom1), StrFormat1); + } + + // Salva la miniatura + imgOutputSmall.Save(Path.Combine(DestDir.FullName, "Temp_" + nomeFileSmall), thisFormat); + System.Drawing.Image g2 = System.Drawing.Image.FromFile(Path.Combine(DestDir.FullName, "Temp_" + nomeFileSmall)); + Bitmap imgOutputSmall2 = new Bitmap(g2, thumbSizeSmall.Width, thumbSizeSmall.Height); + imgOutputSmall2.Save(Path.Combine(DestDir.FullName, nomeFileSmall), thisFormat); + + imgOutputSmall2.Dispose(); + imgOutputSmall.Dispose(); + g2.Dispose(); + File.Delete((Path.Combine(DestDir.FullName, "Temp_" + nomeFileSmall))); + } + else + { + Bitmap imgOutputSmall = new Bitmap(g, thumbSizeSmall.Width, thumbSizeSmall.Height); + imgOutputSmall.Save(Path.Combine(DestDir.FullName, nomeFileSmall), thisFormat); + imgOutputSmall.Dispose(); + } + } + else + { + Bitmap imgOutputSmall = new Bitmap(g, thumbSizeSmall.Width, thumbSizeSmall.Height); + imgOutputSmall.Save(Path.Combine(DestDir.FullName, nomeFileSmall), thisFormat); + imgOutputSmall.Dispose(); + } + } + } + } + + private void aggiungiTesto(Image g, Bitmap imgOutputBig) + { + Graphics grPhoto = default(Graphics); + grPhoto = Graphics.FromImage(imgOutputBig); + grPhoto.SmoothingMode = SmoothingMode.AntiAlias; + + Font crFont = null; + SizeF crSize = new SizeF(); + int LarghezzaStandard = 0; + + if (PicSettings.Grassetto == true) + { + crFont = new Font(PicSettings.IlFont, DimensioneStandard, FontStyle.Bold); + } + else + { + crFont = new Font(PicSettings.IlFont, DimensioneStandard); + } + crSize = grPhoto.MeasureString(testoFirma, crFont); + LarghezzaStandard = Convert.ToInt32(crSize.Width); + + if (crSize.Width > Convert.ToSingle(g.Width)) + { + int Conta = DimensioneStandard; + do + { + if (Conta > 20) + { + Conta -= 5; + } + else + { + Conta -= 1; + } + if (PicSettings.Grassetto == true) + { + crFont = new Font(PicSettings.IlFont, Conta, FontStyle.Bold); + } + else + { + crFont = new Font(PicSettings.IlFont, Conta); + } + crSize = grPhoto.MeasureString(testoFirma, crFont); + if (crSize.Width < Convert.ToSingle(g.Width)) + { + LarghezzaStandard = Convert.ToInt32(crSize.Width); + break; // TODO: might not be correct. Was : Exit Do + } + if (Conta <= 5) + break; // TODO: might not be correct. Was : Exit Do + } while (true); + DimensioneStandard = Conta; + } + + + switch (PicSettings.Posizione.ToUpper()) + { + case "ALTO": + yPosFromBottom = (PicSettings.Margine); + yPosFromBottom3 = (PicSettings.margVert); + + break; + case "BASSO": + yPosFromBottom = Convert.ToSingle((g.Height - crSize.Height - (g.Height * PicSettings.Margine / 100))); + yPosFromBottom3 = Convert.ToSingle((g.Height - crSize.Height - (g.Height * PicSettings.margVert / 100))); + break; + } + + float xCenterOfImg = 0; + float xCenterOfImg3 = 0; + StringFormat StrFormat = new StringFormat(); + switch (PicSettings.Allineamento.ToUpper()) + { + case "SINISTRA": + xCenterOfImg = Convert.ToSingle((PicSettings.Margine + (LarghezzaStandard / 2))); + xCenterOfImg3 = Convert.ToSingle((PicSettings.margVert + (LarghezzaStandard / 2))); + if ((LarghezzaStandard / 2) > (g.Width / 2) - PicSettings.Margine) + { + xCenterOfImg = Convert.ToSingle((g.Width / 2)); + } + if ((LarghezzaStandard / 2) > (g.Width / 2) - PicSettings.margVert) + { + xCenterOfImg3 = Convert.ToSingle((g.Width / 2)); + } + + break; + case "CENTRO": + xCenterOfImg = Convert.ToSingle((g.Width / 2)); + + break; + case "DESTRA": + xCenterOfImg = Convert.ToSingle((g.Width - PicSettings.Margine - (LarghezzaStandard / 2))); + xCenterOfImg3 = Convert.ToSingle((g.Width - PicSettings.margVert - (LarghezzaStandard / 2))); + if ((LarghezzaStandard / 2) > (g.Width / 2) - PicSettings.Margine) + { + xCenterOfImg = Convert.ToSingle((g.Width / 2)); + } + if ((LarghezzaStandard / 2) > (g.Width / 2) - PicSettings.margVert) + { + xCenterOfImg3 = Convert.ToSingle((g.Width / 2)); + } + + break; + } + StrFormat.Alignment = StringAlignment.Center; + + SolidBrush semiTransBrush2 = new SolidBrush(Color.FromArgb(alphaScelta, 0, 0, 0)); + //Dim semiTransBrush As SolidBrush = New SolidBrush(Color.FromArgb(AlphaScelta, _FontColoreR, _FontColoreG, _FontColoreB)) + SolidBrush semiTransBrush = new SolidBrush(Color.FromArgb(alphaScelta, PicSettings.fontColoreRGB)); + + + if (FotoRuotaADestra | FotoRuotaASinistra) + { + if (PicSettings.Grassetto == true) + { + crFont = new Font(PicSettings.IlFont, PicSettings.dimVert, FontStyle.Bold); + } + else + { + crFont = new Font(PicSettings.IlFont, PicSettings.dimVert); + } + + + } + else + { + if (PicSettings.Grassetto == true) + { + crFont = new Font(PicSettings.IlFont, DimensioneStandard, FontStyle.Bold); + } + else + { + crFont = new Font(PicSettings.IlFont, DimensioneStandard); + } + } + + + //qui scrive il testo (nomefilebig) + if (PicSettings.TestoNome) + { + if (PicSettings.NomeData & g.PropertyIdList.Length > 0) + { + ExifReader DatiExif = new ExifReader((Bitmap)g); + dataFoto = DatiExif.DateTimeOriginal; + + grPhoto.DrawString((nomeFileBig + " " + dataFoto.ToShortDateString()), crFont, semiTransBrush2, new PointF(xCenterOfImg + 1, yPosFromBottom + 1), StrFormat); + grPhoto.DrawString((nomeFileBig + " " + dataFoto.ToShortDateString()), crFont, semiTransBrush, new PointF(xCenterOfImg, yPosFromBottom), StrFormat); + } + else + { + grPhoto.DrawString(nomeFileBig, crFont, semiTransBrush2, new PointF(xCenterOfImg + 1, yPosFromBottom + 1), StrFormat); + grPhoto.DrawString(nomeFileBig, crFont, semiTransBrush, new PointF(xCenterOfImg, yPosFromBottom), StrFormat); + + } + } + + if (PicSettings.TestoNome == false) + { + if (FotoRuotaADestra | FotoRuotaASinistra) + { + + if (PicSettings.TestoMin == false) + { + + grPhoto.DrawString(testoFirmaV, crFont, semiTransBrush2, new PointF(xCenterOfImg + 1, yPosFromBottom3 + 1), StrFormat); + grPhoto.DrawString(testoFirmaV, crFont, semiTransBrush, new PointF(xCenterOfImg, yPosFromBottom3), StrFormat); + } + + if (PicSettings.TestoMin == true) + { + grPhoto.DrawString(testoFirmaV, crFont, semiTransBrush2, new PointF(xCenterOfImg + 1, yPosFromBottom4 + 1), StrFormat); + grPhoto.DrawString(testoFirmaV, crFont, semiTransBrush, new PointF(xCenterOfImg, yPosFromBottom4), StrFormat); + + } + } + else + { + grPhoto.DrawString(testoFirma, crFont, semiTransBrush2, new PointF(xCenterOfImg + 1, yPosFromBottom + 1), StrFormat); + grPhoto.DrawString(testoFirma, crFont, semiTransBrush, new PointF(xCenterOfImg, yPosFromBottom), StrFormat); + + + } + } + + if (PicSettings.directorySorgente.ToUpper() == PicSettings.directoryDestinazione.ToUpper()) + { + nomeFileBig2 = nomeFileBig; + nomeFileBig = nomeFileBig.Substring(0, nomeFileBig.Length - 4) + PicSettings.Codice + nomeFileBig.Substring(nomeFileBig.Length - 4); + } + grPhoto.Dispose(); + } + + + + + private void aggiungiLogo(Bitmap imgOutputBig) + { + //imgOutputBig + + if (PicSettings.LogoAggiungi == true & File.Exists(PicSettings.LogoNomeFile)) + { + Image ImmagineLogo = Image.FromFile(PicSettings.LogoNomeFile); + + Color LogoColoreTrasparente = Color.White; + //Dim bmWatermark As Bitmap + + //* Create a Bitmap based on the previously modified photograph Bitmap + //bmWatermark = New Bitmap(imgOutputBig) + //bmWatermark.SetResolution(imgOutputBig.HorizontalResolution, imgOutputBig.VerticalResolution) + + //* Load this Bitmap into a new Graphic Object + Graphics grWatermark = Graphics.FromImage(imgOutputBig); + + //* To achieve a translucent watermark we will apply (2) color manipulations + ImageAttributes imageAttributes = new ImageAttributes(); + + //* The first step replace the background color with one that is transparent (Alpha=0, R=0, G=0, B=0) + ColorMap colorMap = new ColorMap(); + + //* background this will be the color we search for and replace with transparency + colorMap.OldColor = LogoColoreTrasparente; + colorMap.NewColor = Color.FromArgb(0, 0, 0, 0); + + ColorMap[] remapTable = { colorMap }; + imageAttributes.SetRemapTable(remapTable, ColorAdjustType.Bitmap); + + //* The second color manipulation is used to change the opacity by setting the 3rd row and 3rd column to 0.3f + float[][] colorMatrixElements = { + new float[] { + 1f, + 0f, + 0f, + 0f, + 0f + }, + new float[] { + 0f, + 1f, + 0f, + 0f, + 0f + }, + new float[] { + 0f, + 0f, + 1f, + 0f, + 0f + }, + new float[] { + 0f, + 0f, + 0f, + Convert.ToSingle(PicSettings.LogoTrasparenza) / 100, + 0f + }, + new float[] { + 0f, + 0f, + 0f, + 0f, + 1f + } + }; + ColorMatrix wmColorMatrix = new ColorMatrix(colorMatrixElements); + imageAttributes.SetColorMatrix(wmColorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap); + + int FotoLogoH = PicSettings.LogoAltezza; + int FotoLogoW = PicSettings.LogoLarghezza; + double FattoreAlt = ImmagineLogo.Height / FotoLogoH; + double FattoreLarg = ImmagineLogo.Width / FotoLogoW; + Size NuovaSize = default(Size); + if (FattoreLarg > FattoreAlt) + { + NuovaSize = NewthumbSize(ImmagineLogo.Width, ImmagineLogo.Height, FotoLogoW, "Larghezza"); + } + else + { + NuovaSize = NewthumbSize(ImmagineLogo.Width, ImmagineLogo.Height, FotoLogoH, "Altezza"); + } + + int MargineUsato = 0; + int MargineL = 0; + bool InPercentualeL = false; + if (PicSettings.LogoMargine.EndsWith("%") == true) + { + InPercentualeL = true; + } + else + { + InPercentualeL = false; + } + MargineL = Convert.ToInt32(PicSettings.LogoMargine); + if (InPercentualeL == true) + { + MargineUsato = Convert.ToInt32(imgOutputBig.Height * MargineL / 100); + } + else + { + MargineUsato = MargineL; + } + + int xPosOfWm = 0; + int yPosOfWm = 0; + switch (PicSettings.LogoPosizioneH.ToUpper()) + { + case "SINISTRA": + case "NESSUNA": + xPosOfWm = MargineUsato; + + break; + case "CENTRO": + xPosOfWm = Convert.ToInt32((imgOutputBig.Width - NuovaSize.Width) / 2); + + break; + case "DESTRA": + xPosOfWm = ((imgOutputBig.Width - NuovaSize.Width) - MargineUsato); + break; + } + switch (PicSettings.LogoPosizioneV.ToUpper()) + { + case "ALTO": + case "NESSUNA": + yPosOfWm = MargineUsato; + + break; + case "CENTRO": + yPosOfWm = Convert.ToInt32((imgOutputBig.Height - NuovaSize.Height) / 2); + + break; + case "BASSO": + yPosOfWm = ((imgOutputBig.Height - NuovaSize.Height) - MargineUsato); + break; + } + + grWatermark.DrawImage(ImmagineLogo, new Rectangle(xPosOfWm, yPosOfWm, NuovaSize.Width, NuovaSize.Height), 0, 0, ImmagineLogo.Width, ImmagineLogo.Height, GraphicsUnit.Pixel, imageAttributes); + grWatermark.Dispose(); + } + } + + + + private void salvaFoto(Bitmap imgOutputBig, Size thumbSizeBig, string NomeFileBig, string NomeFileSmall, Size thumbSizeSmall, ImageFormat thisFormat) + { + if (PicSettings.FotoGrandeDimOrigina == false) + { + //attenzione non controlla se è png + //imgOutputBig.Save(Path.Combine(_DestDir.FullName, "Temp_" & NomeFileBig), thisFormat) + if (thisFormat.Equals(ImageFormat.Jpeg)) + { + salvaImmagineCustomQuality(imgOutputBig, Path.Combine(DestDir.FullName, "Temp_" + NomeFileBig), PicSettings.jpegQuality); + } + else + { + imgOutputBig.Save(Path.Combine(_DestDir.FullName, "Temp_" + NomeFileBig), thisFormat); + } + + + System.Drawing.Image g2 = System.Drawing.Image.FromFile(Path.Combine(DestDir.FullName, "Temp_" + NomeFileBig)); + if (g2.Width > g2.Height) + { + thumbSizeBig = NewthumbSize(g2.Width, g2.Height, PicSettings.LarghezzaBig, "Larghezza"); + } + else + { + thumbSizeBig = NewthumbSize(g2.Width, g2.Height, PicSettings.AltezzaBig, "Altezza"); + } + Bitmap imgOutputBig2 = new Bitmap(g2, thumbSizeBig.Width, thumbSizeBig.Height); + // + if (thisFormat.Equals(ImageFormat.Jpeg)) + { + salvaImmagineCustomQuality(imgOutputBig2, Path.Combine(DestDir.FullName, NomeFileBig), PicSettings.jpegQuality); + } + else + { + imgOutputBig2.Save(Path.Combine(_DestDir.FullName, NomeFileBig), thisFormat); + } + + imgOutputBig2.Dispose(); + imgOutputBig.Dispose(); + g2.Dispose(); + } + else + { + // + if (thisFormat.Equals(ImageFormat.Jpeg)) + { + salvaImmagineCustomQuality(imgOutputBig, Path.Combine(DestDir.FullName, NomeFileBig), PicSettings.jpegQuality); + } + else + { + imgOutputBig.Save(Path.Combine(_DestDir.FullName, NomeFileBig), thisFormat); + } + + imgOutputBig.Dispose(); + } + + + if (PicSettings.CreaMiniature) + { + if (PicSettings.AggiungiScritteMiniature == true) + { + System.Drawing.Image g1 = null; + if (PicSettings.FotoGrandeDimOrigina == false) + { + g1 = System.Drawing.Image.FromFile(Path.Combine(DestDir.FullName, "Temp_" + NomeFileBig)); + } + else + { + g1 = System.Drawing.Image.FromFile(Path.Combine(DestDir.FullName, NomeFileBig)); + } + Bitmap imgOutputSmall = new Bitmap(g1, thumbSizeSmall.Width, thumbSizeSmall.Height); + if (PicSettings.directorySorgente.ToUpper() == PicSettings.directoryDestinazione.ToUpper()) + { + NomeFileSmall = NomeFileSmall.Substring(0, NomeFileSmall.Length - 4) + PicSettings.Codice + NomeFileSmall.Substring(NomeFileSmall.Length - 4); + } + // + if (thisFormat.Equals(ImageFormat.Jpeg)) + { + salvaImmagineCustomQuality(imgOutputSmall, Path.Combine(DestDir.FullName, NomeFileSmall), PicSettings.jpegQualityMin); + } + else + { + imgOutputSmall.Save(Path.Combine(_DestDir.FullName, NomeFileSmall), thisFormat); + } + + imgOutputSmall.Dispose(); + g1.Dispose(); + } + + + + } + + if (File.Exists(Path.Combine(DestDir.FullName, "Temp_" + NomeFileBig)) == true) + { + File.Delete(Path.Combine(DestDir.FullName, "Temp_" + NomeFileBig)); + } + + + } + + + private void salvaImmagineCustomQuality(Bitmap imageToSave, string nomeFileFinale, long quality) + { + ImageCodecInfo JgpEncoder = GetEncoder(ImageFormat.Jpeg); + Encoder MyEncoder = Encoder.Quality; + + EncoderParameters MyEncoderParameters = new EncoderParameters(1); + + EncoderParameter MyEncoderParameter = new EncoderParameter(MyEncoder, PicSettings.jpegQuality); + MyEncoderParameters.Param[0] = MyEncoderParameter; + imageToSave.Save(nomeFileFinale, JgpEncoder, MyEncoderParameters); + imageToSave.Dispose(); + } + + + + private ImageCodecInfo GetEncoder(ImageFormat format) + { + + ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders(); + + ImageCodecInfo codec = null; + foreach (ImageCodecInfo codec_loopVariable in codecs) + { + codec = codec_loopVariable; + if (codec.FormatID == format.Guid) + { + return codec; + } + } + return null; + + } + + + + + + + /// + /// Calculate the Size of the New image + /// + /// Larghezza + /// Altezza + /// + /// + /// + /// + private Size NewthumbSize(int currentwidth, int currentheight, int MaxPixel, string TipoSize) + { + // e + //*** Larghezza, Altezza, Auto + + double tempMultiplier = 0; + + if (TipoSize.ToUpper() == "Larghezza".ToUpper()) + { + tempMultiplier = MaxPixel / currentwidth; + } + else if (TipoSize.ToUpper() == "Altezza".ToUpper()) + { + tempMultiplier = MaxPixel / currentheight; + } + else + { + // portrait + if (currentheight > currentwidth) + { + tempMultiplier = MaxPixel / currentheight; + } + else + { + tempMultiplier = MaxPixel / currentwidth; + } + } + + Size NewSize = new Size(Convert.ToInt32(currentwidth * tempMultiplier), Convert.ToInt32(currentheight * tempMultiplier)); + + return NewSize; + } + + public FileInfo WorkFile + { + get { return _workFile; } + set { _workFile = value; } + } + + public DirectoryInfo DestDir + { + get { return _DestDir; } + set { _DestDir = value; } + } + + public DirectoryInfo SourceDir + { + get { return _SourceDir; } + set { _SourceDir = value; } + } + + public DirectoryInfo DestDirStart + { + get { return _DestDirStart; } + set { _DestDirStart = value; } + } + + public string NomeFileChild + { + get { return _NomeFileChild; } + set { _NomeFileChild = value; } + } + + +} \ No newline at end of file diff --git a/ImageCatalogCS/MainForm.Designer.cs b/ImageCatalogCS/MainForm.Designer.cs new file mode 100644 index 0000000..54b8132 --- /dev/null +++ b/ImageCatalogCS/MainForm.Designer.cs @@ -0,0 +1,1794 @@ +namespace ImageCatalogCS +{ + partial class MainForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.ProgressBar1 = new System.Windows.Forms.ProgressBar(); + this.CheckBox22 = new System.Windows.Forms.CheckBox(); + this.Label43 = new System.Windows.Forms.Label(); + this.TabControl1 = new System.Windows.Forms.TabControl(); + this.TabPage5 = new System.Windows.Forms.TabPage(); + this.GroupBox11 = new System.Windows.Forms.GroupBox(); + this.Label8 = new System.Windows.Forms.Label(); + this.TextBox8 = new System.Windows.Forms.TextBox(); + this.Label7 = new System.Windows.Forms.Label(); + this.TextBox7 = new System.Windows.Forms.TextBox(); + this.GroupBox3 = new System.Windows.Forms.GroupBox(); + this.chkAggiornaSottodirectory = new System.Windows.Forms.CheckBox(); + this.Button3 = new System.Windows.Forms.Button(); + this.Button2 = new System.Windows.Forms.Button(); + this.Label1 = new System.Windows.Forms.Label(); + this.Label2 = new System.Windows.Forms.Label(); + this.txtSorgente = new System.Windows.Forms.TextBox(); + this.txtDestinazione = new System.Windows.Forms.TextBox(); + this.GroupBox8 = new System.Windows.Forms.GroupBox(); + this.rdbNumFiles = new System.Windows.Forms.RadioButton(); + this.rdbNumProgressiva = new System.Windows.Forms.RadioButton(); + this.txtCifreContatore = new System.Windows.Forms.TextBox(); + this.Label34 = new System.Windows.Forms.Label(); + this.txtSuffissoCartelle = new System.Windows.Forms.TextBox(); + this.Label33 = new System.Windows.Forms.Label(); + this.Label31 = new System.Windows.Forms.Label(); + this.chkCreaSottocartelle = new System.Windows.Forms.CheckBox(); + this.txtFilePerCartella = new System.Windows.Forms.TextBox(); + this.Label32 = new System.Windows.Forms.Label(); + this.GroupBox7 = new System.Windows.Forms.GroupBox(); + this.chkSovrascriviFile = new System.Windows.Forms.CheckBox(); + this.chkRotazioneAutomatica = new System.Windows.Forms.CheckBox(); + this.chkForzaJpg = new System.Windows.Forms.CheckBox(); + this.TabPage3 = new System.Windows.Forms.TabPage(); + this.CheckBox2 = new System.Windows.Forms.CheckBox(); + this.GroupBox10 = new System.Windows.Forms.GroupBox(); + this.Label42 = new System.Windows.Forms.Label(); + this.Label41 = new System.Windows.Forms.Label(); + this.TextBox31 = new System.Windows.Forms.TextBox(); + this.TextBox30 = new System.Windows.Forms.TextBox(); + this.GroupBox9 = new System.Windows.Forms.GroupBox(); + this.CheckBox17 = new System.Windows.Forms.CheckBox(); + this.CheckBox16 = new System.Windows.Forms.CheckBox(); + this.GroupBox5 = new System.Windows.Forms.GroupBox(); + this.TextBox34 = new System.Windows.Forms.TextBox(); + this.Button8 = new System.Windows.Forms.Button(); + this.Label36 = new System.Windows.Forms.Label(); + this.TextBox25 = new System.Windows.Forms.TextBox(); + this.Label35 = new System.Windows.Forms.Label(); + this.ComboBox3 = new System.Windows.Forms.ComboBox(); + this.TextBox11 = new System.Windows.Forms.TextBox(); + this.Label12 = new System.Windows.Forms.Label(); + this.Label11 = new System.Windows.Forms.Label(); + this.CheckBox3 = new System.Windows.Forms.CheckBox(); + this.GroupBox4 = new System.Windows.Forms.GroupBox(); + this.Label40 = new System.Windows.Forms.Label(); + this.TextBox29 = new System.Windows.Forms.TextBox(); + this.TextBox18 = new System.Windows.Forms.TextBox(); + this.Label26 = new System.Windows.Forms.Label(); + this.DateTimePicker1 = new System.Windows.Forms.DateTimePicker(); + this.CheckBox8 = new System.Windows.Forms.CheckBox(); + this.TextBox9 = new System.Windows.Forms.TextBox(); + this.CheckBox7 = new System.Windows.Forms.CheckBox(); + this.Label4 = new System.Windows.Forms.Label(); + this.TextBox4 = new System.Windows.Forms.TextBox(); + this.Label9 = new System.Windows.Forms.Label(); + this.Label13 = new System.Windows.Forms.Label(); + this.ComboBox1 = new System.Windows.Forms.ComboBox(); + this.ComboBox2 = new System.Windows.Forms.ComboBox(); + this.Label14 = new System.Windows.Forms.Label(); + this.TextBox12 = new System.Windows.Forms.TextBox(); + this.Label15 = new System.Windows.Forms.Label(); + this.TabPage2 = new System.Windows.Forms.TabPage(); + this.GroupBox2 = new System.Windows.Forms.GroupBox(); + this.Label45 = new System.Windows.Forms.Label(); + this.TextBox32 = new System.Windows.Forms.TextBox(); + this.TextBox26 = new System.Windows.Forms.TextBox(); + this.Label37 = new System.Windows.Forms.Label(); + this.Label38 = new System.Windows.Forms.Label(); + this.TextBox27 = new System.Windows.Forms.TextBox(); + this.Label39 = new System.Windows.Forms.Label(); + this.TextBox28 = new System.Windows.Forms.TextBox(); + this.CheckBox15 = new System.Windows.Forms.CheckBox(); + this.TabPage1 = new System.Windows.Forms.TabPage(); + this.GroupBox1 = new System.Windows.Forms.GroupBox(); + this.Label46 = new System.Windows.Forms.Label(); + this.TextBox33 = new System.Windows.Forms.TextBox(); + this.Panel2 = new System.Windows.Forms.Panel(); + this.RadioButton3 = new System.Windows.Forms.RadioButton(); + this.RadioButton7 = new System.Windows.Forms.RadioButton(); + this.RadioButton4 = new System.Windows.Forms.RadioButton(); + this.RadioButton6 = new System.Windows.Forms.RadioButton(); + this.RadioButton5 = new System.Windows.Forms.RadioButton(); + this.Label5 = new System.Windows.Forms.Label(); + this.TextBox5 = new System.Windows.Forms.TextBox(); + this.Label6 = new System.Windows.Forms.Label(); + this.TextBox6 = new System.Windows.Forms.TextBox(); + this.Label3 = new System.Windows.Forms.Label(); + this.TextBox3 = new System.Windows.Forms.TextBox(); + this.CheckBox1 = new System.Windows.Forms.CheckBox(); + this.TabPage4 = new System.Windows.Forms.TabPage(); + this.GroupBox6 = new System.Windows.Forms.GroupBox(); + this.PictureBox2 = new System.Windows.Forms.PictureBox(); + this.PictureBox1 = new System.Windows.Forms.PictureBox(); + this.ComboBox5 = new System.Windows.Forms.ComboBox(); + this.ComboBox4 = new System.Windows.Forms.ComboBox(); + this.TextBox19 = new System.Windows.Forms.TextBox(); + this.Label28 = new System.Windows.Forms.Label(); + this.CheckBox5 = new System.Windows.Forms.CheckBox(); + this.TextBox15 = new System.Windows.Forms.TextBox(); + this.TextBox14 = new System.Windows.Forms.TextBox(); + this.Label25 = new System.Windows.Forms.Label(); + this.TextBox16 = new System.Windows.Forms.TextBox(); + this.Label24 = new System.Windows.Forms.Label(); + this.Label22 = new System.Windows.Forms.Label(); + this.Label23 = new System.Windows.Forms.Label(); + this.Button4 = new System.Windows.Forms.Button(); + this.TextBox10 = new System.Windows.Forms.TextBox(); + this.Label29 = new System.Windows.Forms.Label(); + this.Label30 = new System.Windows.Forms.Label(); + this.PictureBox3 = new System.Windows.Forms.PictureBox(); + this.Label20 = new System.Windows.Forms.Label(); + this.Label19 = new System.Windows.Forms.Label(); + this.Label18 = new System.Windows.Forms.Label(); + this.lblFotoTotaliNum = new System.Windows.Forms.Label(); + this.menuStrip1 = new System.Windows.Forms.MenuStrip(); + this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.caricaImpostazioniToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.salvaImpostazioniToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.creaCatalogoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.esciToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.aiutoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.informazioniToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.groupBox12 = new System.Windows.Forms.GroupBox(); + this.btnStopCreazione = new System.Windows.Forms.Button(); + this.lblLog = new System.Windows.Forms.ListBox(); + this.txtFileInfo = new System.Windows.Forms.TextBox(); + this.panelTesto = new System.Windows.Forms.Panel(); + this.panelMiniature = new System.Windows.Forms.Panel(); + this.TabControl1.SuspendLayout(); + this.TabPage5.SuspendLayout(); + this.GroupBox11.SuspendLayout(); + this.GroupBox3.SuspendLayout(); + this.GroupBox8.SuspendLayout(); + this.GroupBox7.SuspendLayout(); + this.TabPage3.SuspendLayout(); + this.GroupBox10.SuspendLayout(); + this.GroupBox9.SuspendLayout(); + this.GroupBox5.SuspendLayout(); + this.GroupBox4.SuspendLayout(); + this.TabPage2.SuspendLayout(); + this.GroupBox2.SuspendLayout(); + this.TabPage1.SuspendLayout(); + this.GroupBox1.SuspendLayout(); + this.Panel2.SuspendLayout(); + this.TabPage4.SuspendLayout(); + this.GroupBox6.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.PictureBox2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.PictureBox1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.PictureBox3)).BeginInit(); + this.menuStrip1.SuspendLayout(); + this.groupBox12.SuspendLayout(); + this.panelTesto.SuspendLayout(); + this.panelMiniature.SuspendLayout(); + this.SuspendLayout(); + // + // ProgressBar1 + // + this.ProgressBar1.Location = new System.Drawing.Point(16, 401); + this.ProgressBar1.Name = "ProgressBar1"; + this.ProgressBar1.Size = new System.Drawing.Size(513, 13); + this.ProgressBar1.TabIndex = 81; + // + // CheckBox22 + // + this.CheckBox22.AutoSize = true; + this.CheckBox22.Location = new System.Drawing.Point(6, 365); + this.CheckBox22.Name = "CheckBox22"; + this.CheckBox22.Size = new System.Drawing.Size(104, 17); + this.CheckBox22.TabIndex = 80; + this.CheckBox22.Text = "Arresta il sistema"; + this.CheckBox22.UseVisualStyleBackColor = true; + // + // Label43 + // + this.Label43.AutoSize = true; + this.Label43.Location = new System.Drawing.Point(3, 349); + this.Label43.Name = "Label43"; + this.Label43.Size = new System.Drawing.Size(25, 13); + this.Label43.TabIndex = 79; + this.Label43.Text = "000"; + this.Label43.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // TabControl1 + // + this.TabControl1.Controls.Add(this.TabPage5); + this.TabControl1.Controls.Add(this.TabPage3); + this.TabControl1.Controls.Add(this.TabPage2); + this.TabControl1.Controls.Add(this.TabPage1); + this.TabControl1.Controls.Add(this.TabPage4); + this.TabControl1.Location = new System.Drawing.Point(12, 27); + this.TabControl1.Name = "TabControl1"; + this.TabControl1.SelectedIndex = 0; + this.TabControl1.Size = new System.Drawing.Size(521, 372); + this.TabControl1.TabIndex = 78; + // + // TabPage5 + // + this.TabPage5.Controls.Add(this.GroupBox11); + this.TabPage5.Controls.Add(this.GroupBox3); + this.TabPage5.Controls.Add(this.GroupBox8); + this.TabPage5.Controls.Add(this.GroupBox7); + this.TabPage5.Location = new System.Drawing.Point(4, 22); + this.TabPage5.Name = "TabPage5"; + this.TabPage5.Padding = new System.Windows.Forms.Padding(3); + this.TabPage5.Size = new System.Drawing.Size(513, 346); + this.TabPage5.TabIndex = 4; + this.TabPage5.Text = "Generale"; + this.TabPage5.UseVisualStyleBackColor = true; + // + // GroupBox11 + // + this.GroupBox11.Controls.Add(this.Label8); + this.GroupBox11.Controls.Add(this.TextBox8); + this.GroupBox11.Controls.Add(this.Label7); + this.GroupBox11.Controls.Add(this.TextBox7); + this.GroupBox11.Location = new System.Drawing.Point(7, 209); + this.GroupBox11.Name = "GroupBox11"; + this.GroupBox11.Size = new System.Drawing.Size(191, 132); + this.GroupBox11.TabIndex = 48; + this.GroupBox11.TabStop = false; + this.GroupBox11.Text = "Avanzate (ATTENZIONE)"; + // + // Label8 + // + this.Label8.AutoSize = true; + this.Label8.Location = new System.Drawing.Point(64, 26); + this.Label8.Name = "Label8"; + this.Label8.Size = new System.Drawing.Size(61, 13); + this.Label8.TabIndex = 3; + this.Label8.Text = "Min Thread"; + // + // TextBox8 + // + this.TextBox8.Location = new System.Drawing.Point(7, 20); + this.TextBox8.Name = "TextBox8"; + this.TextBox8.Size = new System.Drawing.Size(47, 20); + this.TextBox8.TabIndex = 2; + this.TextBox8.Text = "5"; + // + // Label7 + // + this.Label7.AutoSize = true; + this.Label7.Location = new System.Drawing.Point(61, 48); + this.Label7.Name = "Label7"; + this.Label7.Size = new System.Drawing.Size(64, 13); + this.Label7.TabIndex = 1; + this.Label7.Text = "Max Thread"; + // + // TextBox7 + // + this.TextBox7.Location = new System.Drawing.Point(7, 46); + this.TextBox7.Name = "TextBox7"; + this.TextBox7.Size = new System.Drawing.Size(47, 20); + this.TextBox7.TabIndex = 0; + this.TextBox7.Text = "15"; + // + // GroupBox3 + // + this.GroupBox3.Controls.Add(this.chkAggiornaSottodirectory); + this.GroupBox3.Controls.Add(this.Button3); + this.GroupBox3.Controls.Add(this.Button2); + this.GroupBox3.Controls.Add(this.Label1); + this.GroupBox3.Controls.Add(this.Label2); + this.GroupBox3.Controls.Add(this.txtSorgente); + this.GroupBox3.Controls.Add(this.txtDestinazione); + this.GroupBox3.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(192))))); + this.GroupBox3.Location = new System.Drawing.Point(6, 6); + this.GroupBox3.Name = "GroupBox3"; + this.GroupBox3.Size = new System.Drawing.Size(496, 101); + this.GroupBox3.TabIndex = 35; + this.GroupBox3.TabStop = false; + this.GroupBox3.Text = "Directory"; + // + // chkAggiornaSottodirectory + // + this.chkAggiornaSottodirectory.ForeColor = System.Drawing.Color.Black; + this.chkAggiornaSottodirectory.Location = new System.Drawing.Point(80, 64); + this.chkAggiornaSottodirectory.Name = "chkAggiornaSottodirectory"; + this.chkAggiornaSottodirectory.Size = new System.Drawing.Size(152, 24); + this.chkAggiornaSottodirectory.TabIndex = 25; + this.chkAggiornaSottodirectory.Text = "aggiorna le sottodirectory"; + // + // Button3 + // + this.Button3.Location = new System.Drawing.Point(462, 40); + this.Button3.Name = "Button3"; + this.Button3.Size = new System.Drawing.Size(24, 20); + this.Button3.TabIndex = 6; + this.Button3.Text = "..."; + // + // Button2 + // + this.Button2.Location = new System.Drawing.Point(462, 16); + this.Button2.Name = "Button2"; + this.Button2.Size = new System.Drawing.Size(24, 20); + this.Button2.TabIndex = 5; + this.Button2.Text = "..."; + // + // Label1 + // + this.Label1.AutoSize = true; + this.Label1.ForeColor = System.Drawing.Color.Black; + this.Label1.Location = new System.Drawing.Point(6, 19); + this.Label1.Name = "Label1"; + this.Label1.Size = new System.Drawing.Size(50, 13); + this.Label1.TabIndex = 3; + this.Label1.Text = "Sorgente"; + // + // Label2 + // + this.Label2.AutoSize = true; + this.Label2.ForeColor = System.Drawing.Color.Black; + this.Label2.Location = new System.Drawing.Point(6, 43); + this.Label2.Name = "Label2"; + this.Label2.Size = new System.Drawing.Size(68, 13); + this.Label2.TabIndex = 4; + this.Label2.Text = "Destinazione"; + // + // txtSorgente + // + this.txtSorgente.Location = new System.Drawing.Point(80, 16); + this.txtSorgente.Name = "txtSorgente"; + this.txtSorgente.Size = new System.Drawing.Size(376, 20); + this.txtSorgente.TabIndex = 0; + this.txtSorgente.Text = "TextBox1"; + // + // txtDestinazione + // + this.txtDestinazione.Location = new System.Drawing.Point(80, 40); + this.txtDestinazione.Name = "txtDestinazione"; + this.txtDestinazione.Size = new System.Drawing.Size(376, 20); + this.txtDestinazione.TabIndex = 1; + this.txtDestinazione.Text = "TextBox2"; + // + // GroupBox8 + // + this.GroupBox8.Controls.Add(this.rdbNumFiles); + this.GroupBox8.Controls.Add(this.rdbNumProgressiva); + this.GroupBox8.Controls.Add(this.txtCifreContatore); + this.GroupBox8.Controls.Add(this.Label34); + this.GroupBox8.Controls.Add(this.txtSuffissoCartelle); + this.GroupBox8.Controls.Add(this.Label33); + this.GroupBox8.Controls.Add(this.Label31); + this.GroupBox8.Controls.Add(this.chkCreaSottocartelle); + this.GroupBox8.Controls.Add(this.txtFilePerCartella); + this.GroupBox8.Controls.Add(this.Label32); + this.GroupBox8.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(192))))); + this.GroupBox8.Location = new System.Drawing.Point(204, 113); + this.GroupBox8.Name = "GroupBox8"; + this.GroupBox8.Size = new System.Drawing.Size(192, 152); + this.GroupBox8.TabIndex = 47; + this.GroupBox8.TabStop = false; + this.GroupBox8.Text = "Sottocartelle"; + // + // rdbNumFiles + // + this.rdbNumFiles.ForeColor = System.Drawing.Color.Black; + this.rdbNumFiles.Location = new System.Drawing.Point(32, 128); + this.rdbNumFiles.Name = "rdbNumFiles"; + this.rdbNumFiles.Size = new System.Drawing.Size(136, 16); + this.rdbNumFiles.TabIndex = 38; + this.rdbNumFiles.Text = "Numerazione files"; + // + // rdbNumProgressiva + // + this.rdbNumProgressiva.Checked = true; + this.rdbNumProgressiva.ForeColor = System.Drawing.Color.Black; + this.rdbNumProgressiva.Location = new System.Drawing.Point(32, 112); + this.rdbNumProgressiva.Name = "rdbNumProgressiva"; + this.rdbNumProgressiva.Size = new System.Drawing.Size(152, 16); + this.rdbNumProgressiva.TabIndex = 37; + this.rdbNumProgressiva.TabStop = true; + this.rdbNumProgressiva.Text = "Numerazione progressiva"; + // + // txtCifreContatore + // + this.txtCifreContatore.Location = new System.Drawing.Point(128, 88); + this.txtCifreContatore.Name = "txtCifreContatore"; + this.txtCifreContatore.Size = new System.Drawing.Size(56, 20); + this.txtCifreContatore.TabIndex = 34; + this.txtCifreContatore.Text = "4"; + // + // Label34 + // + this.Label34.ForeColor = System.Drawing.Color.Black; + this.Label34.Location = new System.Drawing.Point(8, 88); + this.Label34.Name = "Label34"; + this.Label34.Size = new System.Drawing.Size(112, 16); + this.Label34.TabIndex = 33; + this.Label34.Text = "Num. cifre contatore"; + this.Label34.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // txtSuffissoCartelle + // + this.txtSuffissoCartelle.Location = new System.Drawing.Point(56, 64); + this.txtSuffissoCartelle.Name = "txtSuffissoCartelle"; + this.txtSuffissoCartelle.Size = new System.Drawing.Size(128, 20); + this.txtSuffissoCartelle.TabIndex = 32; + this.txtSuffissoCartelle.Text = "TextBox20"; + // + // Label33 + // + this.Label33.ForeColor = System.Drawing.Color.Black; + this.Label33.Location = new System.Drawing.Point(6, 67); + this.Label33.Name = "Label33"; + this.Label33.Size = new System.Drawing.Size(48, 16); + this.Label33.TabIndex = 31; + this.Label33.Text = "Suffisso"; + // + // Label31 + // + this.Label31.ForeColor = System.Drawing.Color.Black; + this.Label31.Location = new System.Drawing.Point(24, 40); + this.Label31.Name = "Label31"; + this.Label31.Size = new System.Drawing.Size(32, 16); + this.Label31.TabIndex = 30; + this.Label31.Text = "ogni"; + // + // chkCreaSottocartelle + // + this.chkCreaSottocartelle.ForeColor = System.Drawing.Color.Black; + this.chkCreaSottocartelle.Location = new System.Drawing.Point(56, 16); + this.chkCreaSottocartelle.Name = "chkCreaSottocartelle"; + this.chkCreaSottocartelle.Size = new System.Drawing.Size(112, 16); + this.chkCreaSottocartelle.TabIndex = 29; + this.chkCreaSottocartelle.Text = "crea sottocartelle"; + // + // txtFilePerCartella + // + this.txtFilePerCartella.Location = new System.Drawing.Point(56, 40); + this.txtFilePerCartella.Name = "txtFilePerCartella"; + this.txtFilePerCartella.Size = new System.Drawing.Size(64, 20); + this.txtFilePerCartella.TabIndex = 27; + this.txtFilePerCartella.Text = "99"; + // + // Label32 + // + this.Label32.ForeColor = System.Drawing.Color.Black; + this.Label32.Location = new System.Drawing.Point(128, 40); + this.Label32.Name = "Label32"; + this.Label32.Size = new System.Drawing.Size(24, 16); + this.Label32.TabIndex = 28; + this.Label32.Text = "file"; + // + // GroupBox7 + // + this.GroupBox7.Controls.Add(this.chkSovrascriviFile); + this.GroupBox7.Controls.Add(this.chkRotazioneAutomatica); + this.GroupBox7.Controls.Add(this.chkForzaJpg); + this.GroupBox7.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(192))))); + this.GroupBox7.Location = new System.Drawing.Point(6, 113); + this.GroupBox7.Name = "GroupBox7"; + this.GroupBox7.Size = new System.Drawing.Size(192, 88); + this.GroupBox7.TabIndex = 45; + this.GroupBox7.TabStop = false; + this.GroupBox7.Text = "Generale"; + // + // chkSovrascriviFile + // + this.chkSovrascriviFile.AutoSize = true; + this.chkSovrascriviFile.Location = new System.Drawing.Point(16, 61); + this.chkSovrascriviFile.Name = "chkSovrascriviFile"; + this.chkSovrascriviFile.Size = new System.Drawing.Size(94, 17); + this.chkSovrascriviFile.TabIndex = 2; + this.chkSovrascriviFile.Text = "Sovrascrivi file"; + this.chkSovrascriviFile.UseVisualStyleBackColor = true; + // + // chkRotazioneAutomatica + // + this.chkRotazioneAutomatica.ForeColor = System.Drawing.Color.Black; + this.chkRotazioneAutomatica.Location = new System.Drawing.Point(16, 39); + this.chkRotazioneAutomatica.Name = "chkRotazioneAutomatica"; + this.chkRotazioneAutomatica.Size = new System.Drawing.Size(136, 16); + this.chkRotazioneAutomatica.TabIndex = 1; + this.chkRotazioneAutomatica.Text = "Rotazione automatica"; + // + // chkForzaJpg + // + this.chkForzaJpg.Checked = true; + this.chkForzaJpg.CheckState = System.Windows.Forms.CheckState.Checked; + this.chkForzaJpg.ForeColor = System.Drawing.Color.Black; + this.chkForzaJpg.Location = new System.Drawing.Point(16, 18); + this.chkForzaJpg.Name = "chkForzaJpg"; + this.chkForzaJpg.Size = new System.Drawing.Size(80, 16); + this.chkForzaJpg.TabIndex = 0; + this.chkForzaJpg.Text = "Forza Jpg"; + // + // TabPage3 + // + this.TabPage3.Controls.Add(this.panelTesto); + this.TabPage3.Controls.Add(this.CheckBox2); + this.TabPage3.Location = new System.Drawing.Point(4, 22); + this.TabPage3.Name = "TabPage3"; + this.TabPage3.Padding = new System.Windows.Forms.Padding(3); + this.TabPage3.Size = new System.Drawing.Size(513, 346); + this.TabPage3.TabIndex = 2; + this.TabPage3.Text = "Testo"; + this.TabPage3.UseVisualStyleBackColor = true; + // + // CheckBox2 + // + this.CheckBox2.AutoSize = true; + this.CheckBox2.Location = new System.Drawing.Point(7, 8); + this.CheckBox2.Name = "CheckBox2"; + this.CheckBox2.Size = new System.Drawing.Size(93, 17); + this.CheckBox2.TabIndex = 40; + this.CheckBox2.Text = "Aggiungi testo"; + this.CheckBox2.UseVisualStyleBackColor = true; + this.CheckBox2.CheckedChanged += new System.EventHandler(this.CheckBox2_CheckedChanged); + // + // GroupBox10 + // + this.GroupBox10.Controls.Add(this.Label42); + this.GroupBox10.Controls.Add(this.Label41); + this.GroupBox10.Controls.Add(this.TextBox31); + this.GroupBox10.Controls.Add(this.TextBox30); + this.GroupBox10.Location = new System.Drawing.Point(313, 50); + this.GroupBox10.Name = "GroupBox10"; + this.GroupBox10.Size = new System.Drawing.Size(186, 73); + this.GroupBox10.TabIndex = 39; + this.GroupBox10.TabStop = false; + this.GroupBox10.Text = "Testo foto verticali"; + // + // Label42 + // + this.Label42.AutoSize = true; + this.Label42.Location = new System.Drawing.Point(7, 46); + this.Label42.Name = "Label42"; + this.Label42.Size = new System.Drawing.Size(45, 13); + this.Label42.TabIndex = 3; + this.Label42.Text = "Margine"; + // + // Label41 + // + this.Label41.AutoSize = true; + this.Label41.Location = new System.Drawing.Point(7, 25); + this.Label41.Name = "Label41"; + this.Label41.Size = new System.Drawing.Size(108, 13); + this.Label41.TabIndex = 2; + this.Label41.Text = "Dimensione Carattere"; + // + // TextBox31 + // + this.TextBox31.Location = new System.Drawing.Point(131, 46); + this.TextBox31.Name = "TextBox31"; + this.TextBox31.Size = new System.Drawing.Size(39, 20); + this.TextBox31.TabIndex = 1; + // + // TextBox30 + // + this.TextBox30.Location = new System.Drawing.Point(131, 22); + this.TextBox30.Name = "TextBox30"; + this.TextBox30.Size = new System.Drawing.Size(39, 20); + this.TextBox30.TabIndex = 0; + // + // GroupBox9 + // + this.GroupBox9.Controls.Add(this.CheckBox17); + this.GroupBox9.Controls.Add(this.CheckBox16); + this.GroupBox9.Location = new System.Drawing.Point(313, 3); + this.GroupBox9.Name = "GroupBox9"; + this.GroupBox9.Size = new System.Drawing.Size(186, 45); + this.GroupBox9.TabIndex = 38; + this.GroupBox9.TabStop = false; + this.GroupBox9.Text = "Slide show"; + // + // CheckBox17 + // + this.CheckBox17.AutoSize = true; + this.CheckBox17.Location = new System.Drawing.Point(96, 18); + this.CheckBox17.Name = "CheckBox17"; + this.CheckBox17.Size = new System.Drawing.Size(84, 17); + this.CheckBox17.TabIndex = 1; + this.CheckBox17.Text = "Numero foto"; + this.CheckBox17.UseVisualStyleBackColor = true; + // + // CheckBox16 + // + this.CheckBox16.AutoSize = true; + this.CheckBox16.Location = new System.Drawing.Point(6, 19); + this.CheckBox16.Name = "CheckBox16"; + this.CheckBox16.Size = new System.Drawing.Size(49, 17); + this.CheckBox16.TabIndex = 0; + this.CheckBox16.Text = "Data"; + this.CheckBox16.UseVisualStyleBackColor = true; + // + // GroupBox5 + // + this.GroupBox5.Controls.Add(this.TextBox34); + this.GroupBox5.Controls.Add(this.Button8); + this.GroupBox5.Controls.Add(this.Label36); + this.GroupBox5.Controls.Add(this.TextBox25); + this.GroupBox5.Controls.Add(this.Label35); + this.GroupBox5.Controls.Add(this.ComboBox3); + this.GroupBox5.Controls.Add(this.TextBox11); + this.GroupBox5.Controls.Add(this.Label12); + this.GroupBox5.Controls.Add(this.Label11); + this.GroupBox5.Controls.Add(this.CheckBox3); + this.GroupBox5.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(192))))); + this.GroupBox5.Location = new System.Drawing.Point(3, 3); + this.GroupBox5.Name = "GroupBox5"; + this.GroupBox5.Size = new System.Drawing.Size(304, 120); + this.GroupBox5.TabIndex = 37; + this.GroupBox5.TabStop = false; + this.GroupBox5.Text = "Carattere"; + // + // TextBox34 + // + this.TextBox34.Location = new System.Drawing.Point(160, 91); + this.TextBox34.Name = "TextBox34"; + this.TextBox34.Size = new System.Drawing.Size(56, 20); + this.TextBox34.TabIndex = 36; + this.TextBox34.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // Button8 + // + this.Button8.ForeColor = System.Drawing.Color.Black; + this.Button8.Location = new System.Drawing.Point(222, 89); + this.Button8.Name = "Button8"; + this.Button8.Size = new System.Drawing.Size(74, 24); + this.Button8.TabIndex = 35; + this.Button8.Text = "Scegli..."; + // + // Label36 + // + this.Label36.ForeColor = System.Drawing.Color.Black; + this.Label36.Location = new System.Drawing.Point(8, 60); + this.Label36.Name = "Label36"; + this.Label36.Size = new System.Drawing.Size(120, 19); + this.Label36.TabIndex = 34; + this.Label36.Text = "Dimensione miniatura"; + this.Label36.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // TextBox25 + // + this.TextBox25.Location = new System.Drawing.Point(160, 59); + this.TextBox25.Name = "TextBox25"; + this.TextBox25.Size = new System.Drawing.Size(56, 20); + this.TextBox25.TabIndex = 33; + this.TextBox25.Text = "TextBox25"; + // + // Label35 + // + this.Label35.ForeColor = System.Drawing.Color.Black; + this.Label35.Location = new System.Drawing.Point(8, 93); + this.Label35.Name = "Label35"; + this.Label35.Size = new System.Drawing.Size(72, 16); + this.Label35.TabIndex = 32; + this.Label35.Text = "Colore RGB"; + this.Label35.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // ComboBox3 + // + this.ComboBox3.Location = new System.Drawing.Point(96, 8); + this.ComboBox3.Name = "ComboBox3"; + this.ComboBox3.Size = new System.Drawing.Size(120, 21); + this.ComboBox3.TabIndex = 28; + this.ComboBox3.Text = "ComboBox3"; + // + // TextBox11 + // + this.TextBox11.Location = new System.Drawing.Point(160, 35); + this.TextBox11.Name = "TextBox11"; + this.TextBox11.Size = new System.Drawing.Size(56, 20); + this.TextBox11.TabIndex = 27; + this.TextBox11.Text = "TextBox11"; + // + // Label12 + // + this.Label12.AutoSize = true; + this.Label12.ForeColor = System.Drawing.Color.Black; + this.Label12.Location = new System.Drawing.Point(8, 38); + this.Label12.Name = "Label12"; + this.Label12.Size = new System.Drawing.Size(62, 13); + this.Label12.TabIndex = 26; + this.Label12.Text = "Dimensione"; + this.Label12.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // Label11 + // + this.Label11.AutoSize = true; + this.Label11.ForeColor = System.Drawing.Color.Black; + this.Label11.Location = new System.Drawing.Point(56, 8); + this.Label11.Name = "Label11"; + this.Label11.Size = new System.Drawing.Size(28, 13); + this.Label11.TabIndex = 22; + this.Label11.Text = "Font"; + // + // CheckBox3 + // + this.CheckBox3.ForeColor = System.Drawing.Color.Black; + this.CheckBox3.Location = new System.Drawing.Point(224, 8); + this.CheckBox3.Name = "CheckBox3"; + this.CheckBox3.Size = new System.Drawing.Size(72, 24); + this.CheckBox3.TabIndex = 24; + this.CheckBox3.Text = "Grassetto"; + // + // GroupBox4 + // + this.GroupBox4.Controls.Add(this.Label40); + this.GroupBox4.Controls.Add(this.TextBox29); + this.GroupBox4.Controls.Add(this.TextBox18); + this.GroupBox4.Controls.Add(this.Label26); + this.GroupBox4.Controls.Add(this.DateTimePicker1); + this.GroupBox4.Controls.Add(this.CheckBox8); + this.GroupBox4.Controls.Add(this.TextBox9); + this.GroupBox4.Controls.Add(this.CheckBox7); + this.GroupBox4.Controls.Add(this.Label4); + this.GroupBox4.Controls.Add(this.TextBox4); + this.GroupBox4.Controls.Add(this.Label9); + this.GroupBox4.Controls.Add(this.Label13); + this.GroupBox4.Controls.Add(this.ComboBox1); + this.GroupBox4.Controls.Add(this.ComboBox2); + this.GroupBox4.Controls.Add(this.Label14); + this.GroupBox4.Controls.Add(this.TextBox12); + this.GroupBox4.Controls.Add(this.Label15); + this.GroupBox4.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(192))))); + this.GroupBox4.Location = new System.Drawing.Point(3, 129); + this.GroupBox4.Name = "GroupBox4"; + this.GroupBox4.Size = new System.Drawing.Size(496, 171); + this.GroupBox4.TabIndex = 36; + this.GroupBox4.TabStop = false; + this.GroupBox4.Text = "Testo da applicare"; + // + // Label40 + // + this.Label40.AutoSize = true; + this.Label40.Location = new System.Drawing.Point(8, 52); + this.Label40.Name = "Label40"; + this.Label40.Size = new System.Drawing.Size(48, 13); + this.Label40.TabIndex = 40; + this.Label40.Text = "Verticale"; + // + // TextBox29 + // + this.TextBox29.Location = new System.Drawing.Point(72, 49); + this.TextBox29.Multiline = true; + this.TextBox29.Name = "TextBox29"; + this.TextBox29.Size = new System.Drawing.Size(408, 44); + this.TextBox29.TabIndex = 39; + // + // TextBox18 + // + this.TextBox18.Location = new System.Drawing.Point(232, 147); + this.TextBox18.Name = "TextBox18"; + this.TextBox18.Size = new System.Drawing.Size(100, 20); + this.TextBox18.TabIndex = 38; + // + // Label26 + // + this.Label26.AutoSize = true; + this.Label26.ForeColor = System.Drawing.Color.Black; + this.Label26.Location = new System.Drawing.Point(344, 147); + this.Label26.Name = "Label26"; + this.Label26.Size = new System.Drawing.Size(48, 13); + this.Label26.TabIndex = 37; + this.Label26.Text = "partenza"; + // + // DateTimePicker1 + // + this.DateTimePicker1.Format = System.Windows.Forms.DateTimePickerFormat.Time; + this.DateTimePicker1.Location = new System.Drawing.Point(392, 147); + this.DateTimePicker1.Name = "DateTimePicker1"; + this.DateTimePicker1.Size = new System.Drawing.Size(88, 20); + this.DateTimePicker1.TabIndex = 36; + // + // CheckBox8 + // + this.CheckBox8.ForeColor = System.Drawing.Color.Black; + this.CheckBox8.Location = new System.Drawing.Point(72, 147); + this.CheckBox8.Name = "CheckBox8"; + this.CheckBox8.Size = new System.Drawing.Size(56, 16); + this.CheckBox8.TabIndex = 35; + this.CheckBox8.Text = "Orario"; + // + // TextBox9 + // + this.TextBox9.Location = new System.Drawing.Point(120, 99); + this.TextBox9.Name = "TextBox9"; + this.TextBox9.Size = new System.Drawing.Size(56, 20); + this.TextBox9.TabIndex = 20; + this.TextBox9.Text = "TextBox9"; + // + // CheckBox7 + // + this.CheckBox7.ForeColor = System.Drawing.Color.Black; + this.CheckBox7.Location = new System.Drawing.Point(136, 147); + this.CheckBox7.Name = "CheckBox7"; + this.CheckBox7.Size = new System.Drawing.Size(88, 16); + this.CheckBox7.TabIndex = 34; + this.CheckBox7.Text = "Tempo gara"; + // + // Label4 + // + this.Label4.AutoSize = true; + this.Label4.ForeColor = System.Drawing.Color.Black; + this.Label4.Location = new System.Drawing.Point(8, 24); + this.Label4.Name = "Label4"; + this.Label4.Size = new System.Drawing.Size(59, 13); + this.Label4.TabIndex = 9; + this.Label4.Text = "Orizzontale"; + // + // TextBox4 + // + this.TextBox4.Location = new System.Drawing.Point(72, 24); + this.TextBox4.Name = "TextBox4"; + this.TextBox4.Size = new System.Drawing.Size(408, 20); + this.TextBox4.TabIndex = 8; + this.TextBox4.Text = "TextBox4"; + // + // Label9 + // + this.Label9.AutoSize = true; + this.Label9.ForeColor = System.Drawing.Color.Black; + this.Label9.Location = new System.Drawing.Point(8, 99); + this.Label9.Name = "Label9"; + this.Label9.Size = new System.Drawing.Size(110, 13); + this.Label9.TabIndex = 19; + this.Label9.Text = "Trasparenza (0-100%)"; + // + // Label13 + // + this.Label13.AutoSize = true; + this.Label13.ForeColor = System.Drawing.Color.Black; + this.Label13.Location = new System.Drawing.Point(16, 123); + this.Label13.Name = "Label13"; + this.Label13.Size = new System.Drawing.Size(52, 13); + this.Label13.TabIndex = 29; + this.Label13.Text = "Posizione"; + // + // ComboBox1 + // + this.ComboBox1.Location = new System.Drawing.Point(72, 123); + this.ComboBox1.Name = "ComboBox1"; + this.ComboBox1.Size = new System.Drawing.Size(104, 21); + this.ComboBox1.TabIndex = 28; + this.ComboBox1.Text = "ComboBox1"; + // + // ComboBox2 + // + this.ComboBox2.Location = new System.Drawing.Point(376, 123); + this.ComboBox2.Name = "ComboBox2"; + this.ComboBox2.Size = new System.Drawing.Size(104, 21); + this.ComboBox2.TabIndex = 31; + this.ComboBox2.Text = "ComboBox2"; + // + // Label14 + // + this.Label14.AutoSize = true; + this.Label14.ForeColor = System.Drawing.Color.Black; + this.Label14.Location = new System.Drawing.Point(304, 123); + this.Label14.Name = "Label14"; + this.Label14.Size = new System.Drawing.Size(67, 13); + this.Label14.TabIndex = 30; + this.Label14.Text = "Allineamento"; + // + // TextBox12 + // + this.TextBox12.Location = new System.Drawing.Point(376, 99); + this.TextBox12.Name = "TextBox12"; + this.TextBox12.Size = new System.Drawing.Size(104, 20); + this.TextBox12.TabIndex = 33; + this.TextBox12.Text = "TextBox12"; + // + // Label15 + // + this.Label15.AutoSize = true; + this.Label15.ForeColor = System.Drawing.Color.Black; + this.Label15.Location = new System.Drawing.Point(296, 99); + this.Label15.Name = "Label15"; + this.Label15.Size = new System.Drawing.Size(75, 13); + this.Label15.TabIndex = 32; + this.Label15.Text = "Margine (pixel)"; + // + // TabPage2 + // + this.TabPage2.Controls.Add(this.GroupBox2); + this.TabPage2.Location = new System.Drawing.Point(4, 22); + this.TabPage2.Name = "TabPage2"; + this.TabPage2.Padding = new System.Windows.Forms.Padding(3); + this.TabPage2.Size = new System.Drawing.Size(513, 351); + this.TabPage2.TabIndex = 5; + this.TabPage2.Text = "Foto"; + this.TabPage2.UseVisualStyleBackColor = true; + // + // GroupBox2 + // + this.GroupBox2.Controls.Add(this.Label45); + this.GroupBox2.Controls.Add(this.TextBox32); + this.GroupBox2.Controls.Add(this.TextBox26); + this.GroupBox2.Controls.Add(this.Label37); + this.GroupBox2.Controls.Add(this.Label38); + this.GroupBox2.Controls.Add(this.TextBox27); + this.GroupBox2.Controls.Add(this.Label39); + this.GroupBox2.Controls.Add(this.TextBox28); + this.GroupBox2.Controls.Add(this.CheckBox15); + this.GroupBox2.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(192))))); + this.GroupBox2.Location = new System.Drawing.Point(3, 6); + this.GroupBox2.Name = "GroupBox2"; + this.GroupBox2.Size = new System.Drawing.Size(304, 156); + this.GroupBox2.TabIndex = 36; + this.GroupBox2.TabStop = false; + this.GroupBox2.Text = "Foto grande"; + // + // Label45 + // + this.Label45.AutoSize = true; + this.Label45.Location = new System.Drawing.Point(11, 86); + this.Label45.Name = "Label45"; + this.Label45.Size = new System.Drawing.Size(40, 13); + this.Label45.TabIndex = 22; + this.Label45.Text = "Qualità"; + // + // TextBox32 + // + this.TextBox32.Location = new System.Drawing.Point(72, 80); + this.TextBox32.Name = "TextBox32"; + this.TextBox32.Size = new System.Drawing.Size(72, 20); + this.TextBox32.TabIndex = 21; + this.TextBox32.Text = "100"; + // + // TextBox26 + // + this.TextBox26.Location = new System.Drawing.Point(224, 48); + this.TextBox26.Name = "TextBox26"; + this.TextBox26.Size = new System.Drawing.Size(56, 20); + this.TextBox26.TabIndex = 20; + this.TextBox26.Text = "TextBox26"; + // + // Label37 + // + this.Label37.ForeColor = System.Drawing.Color.Black; + this.Label37.Location = new System.Drawing.Point(168, 48); + this.Label37.Name = "Label37"; + this.Label37.Size = new System.Drawing.Size(48, 16); + this.Label37.TabIndex = 19; + this.Label37.Text = "Suffisso"; + this.Label37.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // Label38 + // + this.Label38.AutoSize = true; + this.Label38.ForeColor = System.Drawing.Color.Black; + this.Label38.Location = new System.Drawing.Point(24, 24); + this.Label38.Name = "Label38"; + this.Label38.Size = new System.Drawing.Size(41, 13); + this.Label38.TabIndex = 16; + this.Label38.Text = "Altezza"; + // + // TextBox27 + // + this.TextBox27.Location = new System.Drawing.Point(72, 24); + this.TextBox27.Name = "TextBox27"; + this.TextBox27.Size = new System.Drawing.Size(72, 20); + this.TextBox27.TabIndex = 14; + this.TextBox27.Text = "TextBox27"; + // + // Label39 + // + this.Label39.AutoSize = true; + this.Label39.ForeColor = System.Drawing.Color.Black; + this.Label39.Location = new System.Drawing.Point(8, 48); + this.Label39.Name = "Label39"; + this.Label39.Size = new System.Drawing.Size(56, 13); + this.Label39.TabIndex = 17; + this.Label39.Text = "Larghezza"; + // + // TextBox28 + // + this.TextBox28.Location = new System.Drawing.Point(72, 48); + this.TextBox28.Name = "TextBox28"; + this.TextBox28.Size = new System.Drawing.Size(72, 20); + this.TextBox28.TabIndex = 15; + this.TextBox28.Text = "TextBox28"; + // + // CheckBox15 + // + this.CheckBox15.Checked = true; + this.CheckBox15.CheckState = System.Windows.Forms.CheckState.Checked; + this.CheckBox15.ForeColor = System.Drawing.Color.Black; + this.CheckBox15.Location = new System.Drawing.Point(168, 16); + this.CheckBox15.Name = "CheckBox15"; + this.CheckBox15.Size = new System.Drawing.Size(120, 32); + this.CheckBox15.TabIndex = 18; + this.CheckBox15.Text = "Mantieni dimensioni originali"; + // + // TabPage1 + // + this.TabPage1.Controls.Add(this.panelMiniature); + this.TabPage1.Controls.Add(this.CheckBox1); + this.TabPage1.Location = new System.Drawing.Point(4, 22); + this.TabPage1.Name = "TabPage1"; + this.TabPage1.Padding = new System.Windows.Forms.Padding(3); + this.TabPage1.Size = new System.Drawing.Size(513, 346); + this.TabPage1.TabIndex = 0; + this.TabPage1.Text = "Miniature"; + this.TabPage1.UseVisualStyleBackColor = true; + // + // GroupBox1 + // + this.GroupBox1.Controls.Add(this.Label46); + this.GroupBox1.Controls.Add(this.TextBox33); + this.GroupBox1.Controls.Add(this.Panel2); + this.GroupBox1.Controls.Add(this.Label5); + this.GroupBox1.Controls.Add(this.TextBox5); + this.GroupBox1.Controls.Add(this.Label6); + this.GroupBox1.Controls.Add(this.TextBox6); + this.GroupBox1.Controls.Add(this.Label3); + this.GroupBox1.Controls.Add(this.TextBox3); + this.GroupBox1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(192))))); + this.GroupBox1.Location = new System.Drawing.Point(3, 3); + this.GroupBox1.Name = "GroupBox1"; + this.GroupBox1.Size = new System.Drawing.Size(350, 210); + this.GroupBox1.TabIndex = 25; + this.GroupBox1.TabStop = false; + this.GroupBox1.Text = "Miniature"; + // + // Label46 + // + this.Label46.AutoSize = true; + this.Label46.Location = new System.Drawing.Point(198, 43); + this.Label46.Name = "Label46"; + this.Label46.Size = new System.Drawing.Size(40, 13); + this.Label46.TabIndex = 21; + this.Label46.Text = "Qualità"; + // + // TextBox33 + // + this.TextBox33.Location = new System.Drawing.Point(244, 40); + this.TextBox33.Name = "TextBox33"; + this.TextBox33.Size = new System.Drawing.Size(100, 20); + this.TextBox33.TabIndex = 20; + // + // Panel2 + // + this.Panel2.Controls.Add(this.RadioButton3); + this.Panel2.Controls.Add(this.RadioButton7); + this.Panel2.Controls.Add(this.RadioButton4); + this.Panel2.Controls.Add(this.RadioButton6); + this.Panel2.Controls.Add(this.RadioButton5); + this.Panel2.Location = new System.Drawing.Point(56, 114); + this.Panel2.Name = "Panel2"; + this.Panel2.Size = new System.Drawing.Size(235, 90); + this.Panel2.TabIndex = 19; + // + // RadioButton3 + // + this.RadioButton3.AutoSize = true; + this.RadioButton3.Location = new System.Drawing.Point(15, 16); + this.RadioButton3.Name = "RadioButton3"; + this.RadioButton3.Size = new System.Drawing.Size(99, 17); + this.RadioButton3.TabIndex = 14; + this.RadioButton3.TabStop = true; + this.RadioButton3.Text = "Aggiungi Scritta"; + this.RadioButton3.UseVisualStyleBackColor = true; + // + // RadioButton7 + // + this.RadioButton7.AutoSize = true; + this.RadioButton7.Location = new System.Drawing.Point(129, 40); + this.RadioButton7.Name = "RadioButton7"; + this.RadioButton7.Size = new System.Drawing.Size(95, 17); + this.RadioButton7.TabIndex = 18; + this.RadioButton7.TabStop = true; + this.RadioButton7.Text = "numero+tempo"; + this.RadioButton7.UseVisualStyleBackColor = true; + // + // RadioButton4 + // + this.RadioButton4.AutoSize = true; + this.RadioButton4.Location = new System.Drawing.Point(15, 40); + this.RadioButton4.Name = "RadioButton4"; + this.RadioButton4.Size = new System.Drawing.Size(95, 17); + this.RadioButton4.TabIndex = 15; + this.RadioButton4.TabStop = true; + this.RadioButton4.Text = "Aggiungi orario"; + this.RadioButton4.UseVisualStyleBackColor = true; + // + // RadioButton6 + // + this.RadioButton6.AutoSize = true; + this.RadioButton6.Location = new System.Drawing.Point(129, 16); + this.RadioButton6.Name = "RadioButton6"; + this.RadioButton6.Size = new System.Drawing.Size(83, 17); + this.RadioButton6.TabIndex = 17; + this.RadioButton6.TabStop = true; + this.RadioButton6.Text = "Numero foto"; + this.RadioButton6.UseVisualStyleBackColor = true; + // + // RadioButton5 + // + this.RadioButton5.AutoSize = true; + this.RadioButton5.Location = new System.Drawing.Point(15, 65); + this.RadioButton5.Name = "RadioButton5"; + this.RadioButton5.Size = new System.Drawing.Size(84, 17); + this.RadioButton5.TabIndex = 16; + this.RadioButton5.TabStop = true; + this.RadioButton5.Text = "Tempo Gara"; + this.RadioButton5.UseVisualStyleBackColor = true; + // + // Label5 + // + this.Label5.AutoSize = true; + this.Label5.ForeColor = System.Drawing.Color.Black; + this.Label5.Location = new System.Drawing.Point(24, 88); + this.Label5.Name = "Label5"; + this.Label5.Size = new System.Drawing.Size(41, 13); + this.Label5.TabIndex = 12; + this.Label5.Text = "Altezza"; + // + // TextBox5 + // + this.TextBox5.Location = new System.Drawing.Point(72, 64); + this.TextBox5.Name = "TextBox5"; + this.TextBox5.Size = new System.Drawing.Size(88, 20); + this.TextBox5.TabIndex = 10; + this.TextBox5.Text = "TextBox5"; + // + // Label6 + // + this.Label6.AutoSize = true; + this.Label6.ForeColor = System.Drawing.Color.Black; + this.Label6.Location = new System.Drawing.Point(8, 64); + this.Label6.Name = "Label6"; + this.Label6.Size = new System.Drawing.Size(56, 13); + this.Label6.TabIndex = 13; + this.Label6.Text = "Larghezza"; + // + // TextBox6 + // + this.TextBox6.Location = new System.Drawing.Point(72, 88); + this.TextBox6.Name = "TextBox6"; + this.TextBox6.Size = new System.Drawing.Size(88, 20); + this.TextBox6.TabIndex = 11; + this.TextBox6.Text = "TextBox6"; + // + // Label3 + // + this.Label3.AutoSize = true; + this.Label3.ForeColor = System.Drawing.Color.Black; + this.Label3.Location = new System.Drawing.Point(24, 40); + this.Label3.Name = "Label3"; + this.Label3.Size = new System.Drawing.Size(44, 13); + this.Label3.TabIndex = 7; + this.Label3.Text = "Suffisso"; + // + // TextBox3 + // + this.TextBox3.Location = new System.Drawing.Point(72, 40); + this.TextBox3.Name = "TextBox3"; + this.TextBox3.Size = new System.Drawing.Size(88, 20); + this.TextBox3.TabIndex = 6; + this.TextBox3.Text = "TextBox3"; + // + // CheckBox1 + // + this.CheckBox1.ForeColor = System.Drawing.Color.Black; + this.CheckBox1.Location = new System.Drawing.Point(6, 7); + this.CheckBox1.Name = "CheckBox1"; + this.CheckBox1.Size = new System.Drawing.Size(104, 24); + this.CheckBox1.TabIndex = 5; + this.CheckBox1.Text = "Crea miniature"; + this.CheckBox1.CheckedChanged += new System.EventHandler(this.CheckBox1_CheckedChanged); + // + // TabPage4 + // + this.TabPage4.Controls.Add(this.GroupBox6); + this.TabPage4.Location = new System.Drawing.Point(4, 22); + this.TabPage4.Name = "TabPage4"; + this.TabPage4.Padding = new System.Windows.Forms.Padding(3); + this.TabPage4.Size = new System.Drawing.Size(513, 351); + this.TabPage4.TabIndex = 3; + this.TabPage4.Text = "Logo"; + this.TabPage4.UseVisualStyleBackColor = true; + // + // GroupBox6 + // + this.GroupBox6.Controls.Add(this.PictureBox2); + this.GroupBox6.Controls.Add(this.PictureBox1); + this.GroupBox6.Controls.Add(this.ComboBox5); + this.GroupBox6.Controls.Add(this.ComboBox4); + this.GroupBox6.Controls.Add(this.TextBox19); + this.GroupBox6.Controls.Add(this.Label28); + this.GroupBox6.Controls.Add(this.CheckBox5); + this.GroupBox6.Controls.Add(this.TextBox15); + this.GroupBox6.Controls.Add(this.TextBox14); + this.GroupBox6.Controls.Add(this.Label25); + this.GroupBox6.Controls.Add(this.TextBox16); + this.GroupBox6.Controls.Add(this.Label24); + this.GroupBox6.Controls.Add(this.Label22); + this.GroupBox6.Controls.Add(this.Label23); + this.GroupBox6.Controls.Add(this.Button4); + this.GroupBox6.Controls.Add(this.TextBox10); + this.GroupBox6.Controls.Add(this.Label29); + this.GroupBox6.Controls.Add(this.Label30); + this.GroupBox6.Controls.Add(this.PictureBox3); + this.GroupBox6.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(192))))); + this.GroupBox6.Location = new System.Drawing.Point(6, 6); + this.GroupBox6.Name = "GroupBox6"; + this.GroupBox6.Size = new System.Drawing.Size(496, 224); + this.GroupBox6.TabIndex = 42; + this.GroupBox6.TabStop = false; + this.GroupBox6.Text = "Logo"; + // + // PictureBox2 + // + this.PictureBox2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.PictureBox2.Location = new System.Drawing.Point(144, 192); + this.PictureBox2.Name = "PictureBox2"; + this.PictureBox2.Size = new System.Drawing.Size(24, 24); + this.PictureBox2.TabIndex = 44; + this.PictureBox2.TabStop = false; + this.PictureBox2.Visible = false; + // + // PictureBox1 + // + this.PictureBox1.Cursor = System.Windows.Forms.Cursors.Cross; + this.PictureBox1.Location = new System.Drawing.Point(256, 56); + this.PictureBox1.Name = "PictureBox1"; + this.PictureBox1.Size = new System.Drawing.Size(224, 160); + this.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.PictureBox1.TabIndex = 43; + this.PictureBox1.TabStop = false; + // + // ComboBox5 + // + this.ComboBox5.Location = new System.Drawing.Point(144, 168); + this.ComboBox5.Name = "ComboBox5"; + this.ComboBox5.Size = new System.Drawing.Size(96, 21); + this.ComboBox5.TabIndex = 42; + this.ComboBox5.Text = "ComboBox5"; + // + // ComboBox4 + // + this.ComboBox4.Location = new System.Drawing.Point(144, 144); + this.ComboBox4.Name = "ComboBox4"; + this.ComboBox4.Size = new System.Drawing.Size(96, 21); + this.ComboBox4.TabIndex = 41; + this.ComboBox4.Text = "ComboBox4"; + // + // TextBox19 + // + this.TextBox19.Location = new System.Drawing.Point(144, 96); + this.TextBox19.Name = "TextBox19"; + this.TextBox19.Size = new System.Drawing.Size(96, 20); + this.TextBox19.TabIndex = 40; + this.TextBox19.Text = "TextBox19"; + // + // Label28 + // + this.Label28.ForeColor = System.Drawing.Color.Black; + this.Label28.Location = new System.Drawing.Point(17, 97); + this.Label28.Name = "Label28"; + this.Label28.Size = new System.Drawing.Size(120, 16); + this.Label28.TabIndex = 39; + this.Label28.Text = "Trasparenza (0-100%)"; + this.Label28.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // CheckBox5 + // + this.CheckBox5.ForeColor = System.Drawing.Color.Black; + this.CheckBox5.Location = new System.Drawing.Point(0, 26); + this.CheckBox5.Name = "CheckBox5"; + this.CheckBox5.Size = new System.Drawing.Size(72, 20); + this.CheckBox5.TabIndex = 38; + this.CheckBox5.Text = "Aggiungi"; + // + // TextBox15 + // + this.TextBox15.Location = new System.Drawing.Point(144, 72); + this.TextBox15.Name = "TextBox15"; + this.TextBox15.Size = new System.Drawing.Size(96, 20); + this.TextBox15.TabIndex = 19; + this.TextBox15.Text = "TextBox15"; + // + // TextBox14 + // + this.TextBox14.Location = new System.Drawing.Point(144, 48); + this.TextBox14.Name = "TextBox14"; + this.TextBox14.Size = new System.Drawing.Size(96, 20); + this.TextBox14.TabIndex = 18; + this.TextBox14.Text = "TextBox14"; + // + // Label25 + // + this.Label25.AutoSize = true; + this.Label25.ForeColor = System.Drawing.Color.Black; + this.Label25.Location = new System.Drawing.Point(17, 168); + this.Label25.Name = "Label25"; + this.Label25.Size = new System.Drawing.Size(95, 13); + this.Label25.TabIndex = 36; + this.Label25.Text = "Posizione verticale"; + this.Label25.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // TextBox16 + // + this.TextBox16.Location = new System.Drawing.Point(144, 120); + this.TextBox16.Name = "TextBox16"; + this.TextBox16.Size = new System.Drawing.Size(96, 20); + this.TextBox16.TabIndex = 35; + this.TextBox16.Text = "TextBox16"; + // + // Label24 + // + this.Label24.AutoSize = true; + this.Label24.ForeColor = System.Drawing.Color.Black; + this.Label24.Location = new System.Drawing.Point(19, 123); + this.Label24.Name = "Label24"; + this.Label24.Size = new System.Drawing.Size(88, 13); + this.Label24.TabIndex = 34; + this.Label24.Text = "Margine (pixel/%)"; + this.Label24.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // Label22 + // + this.Label22.AutoSize = true; + this.Label22.ForeColor = System.Drawing.Color.Black; + this.Label22.Location = new System.Drawing.Point(19, 51); + this.Label22.Name = "Label22"; + this.Label22.Size = new System.Drawing.Size(41, 13); + this.Label22.TabIndex = 20; + this.Label22.Text = "Altezza"; + this.Label22.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // Label23 + // + this.Label23.AutoSize = true; + this.Label23.ForeColor = System.Drawing.Color.Black; + this.Label23.Location = new System.Drawing.Point(19, 75); + this.Label23.Name = "Label23"; + this.Label23.Size = new System.Drawing.Size(56, 13); + this.Label23.TabIndex = 21; + this.Label23.Text = "Larghezza"; + this.Label23.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // Button4 + // + this.Button4.Location = new System.Drawing.Point(464, 24); + this.Button4.Name = "Button4"; + this.Button4.Size = new System.Drawing.Size(24, 20); + this.Button4.TabIndex = 8; + this.Button4.Text = "..."; + // + // TextBox10 + // + this.TextBox10.Location = new System.Drawing.Point(144, 24); + this.TextBox10.Name = "TextBox10"; + this.TextBox10.Size = new System.Drawing.Size(312, 20); + this.TextBox10.TabIndex = 6; + this.TextBox10.Text = "TextBox10"; + // + // Label29 + // + this.Label29.AutoSize = true; + this.Label29.ForeColor = System.Drawing.Color.Black; + this.Label29.Location = new System.Drawing.Point(17, 147); + this.Label29.Name = "Label29"; + this.Label29.Size = new System.Drawing.Size(105, 13); + this.Label29.TabIndex = 36; + this.Label29.Text = "Posizione orizzontale"; + this.Label29.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // Label30 + // + this.Label30.AutoSize = true; + this.Label30.ForeColor = System.Drawing.Color.Black; + this.Label30.Location = new System.Drawing.Point(19, 203); + this.Label30.Name = "Label30"; + this.Label30.Size = new System.Drawing.Size(93, 13); + this.Label30.TabIndex = 36; + this.Label30.Text = "Colore trasparente"; + this.Label30.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.Label30.Visible = false; + // + // PictureBox3 + // + this.PictureBox3.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.PictureBox3.Location = new System.Drawing.Point(216, 192); + this.PictureBox3.Name = "PictureBox3"; + this.PictureBox3.Size = new System.Drawing.Size(24, 24); + this.PictureBox3.TabIndex = 44; + this.PictureBox3.TabStop = false; + this.PictureBox3.Visible = false; + // + // Label20 + // + this.Label20.AutoSize = true; + this.Label20.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Label20.Location = new System.Drawing.Point(6, 301); + this.Label20.Name = "Label20"; + this.Label20.Size = new System.Drawing.Size(104, 16); + this.Label20.TabIndex = 74; + this.Label20.Text = "foto generate:"; + // + // Label19 + // + this.Label19.AutoSize = true; + this.Label19.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Label19.Location = new System.Drawing.Point(6, 282); + this.Label19.Name = "Label19"; + this.Label19.Size = new System.Drawing.Size(80, 16); + this.Label19.TabIndex = 73; + this.Label19.Text = "foto totali: "; + // + // Label18 + // + this.Label18.AutoSize = true; + this.Label18.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Label18.Location = new System.Drawing.Point(110, 301); + this.Label18.Name = "Label18"; + this.Label18.Size = new System.Drawing.Size(19, 20); + this.Label18.TabIndex = 72; + this.Label18.Text = "0"; + // + // lblFotoTotaliNum + // + this.lblFotoTotaliNum.AutoSize = true; + this.lblFotoTotaliNum.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lblFotoTotaliNum.Location = new System.Drawing.Point(110, 282); + this.lblFotoTotaliNum.Name = "lblFotoTotaliNum"; + this.lblFotoTotaliNum.Size = new System.Drawing.Size(19, 20); + this.lblFotoTotaliNum.TabIndex = 71; + this.lblFotoTotaliNum.Text = "0"; + // + // menuStrip1 + // + this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.fileToolStripMenuItem, + this.aiutoToolStripMenuItem}); + this.menuStrip1.Location = new System.Drawing.Point(0, 0); + this.menuStrip1.Name = "menuStrip1"; + this.menuStrip1.Size = new System.Drawing.Size(756, 24); + this.menuStrip1.TabIndex = 82; + this.menuStrip1.Text = "menuStrip1"; + // + // fileToolStripMenuItem + // + this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.caricaImpostazioniToolStripMenuItem, + this.salvaImpostazioniToolStripMenuItem, + this.creaCatalogoToolStripMenuItem, + this.esciToolStripMenuItem}); + this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; + this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20); + this.fileToolStripMenuItem.Text = "File"; + // + // caricaImpostazioniToolStripMenuItem + // + this.caricaImpostazioniToolStripMenuItem.Name = "caricaImpostazioniToolStripMenuItem"; + this.caricaImpostazioniToolStripMenuItem.Size = new System.Drawing.Size(187, 22); + this.caricaImpostazioniToolStripMenuItem.Text = "Carica impostazioni..."; + this.caricaImpostazioniToolStripMenuItem.Click += new System.EventHandler(this.caricaImpostazioniToolStripMenuItem_Click); + // + // salvaImpostazioniToolStripMenuItem + // + this.salvaImpostazioniToolStripMenuItem.Name = "salvaImpostazioniToolStripMenuItem"; + this.salvaImpostazioniToolStripMenuItem.Size = new System.Drawing.Size(187, 22); + this.salvaImpostazioniToolStripMenuItem.Text = "Salva impostazioni..."; + // + // creaCatalogoToolStripMenuItem + // + this.creaCatalogoToolStripMenuItem.Name = "creaCatalogoToolStripMenuItem"; + this.creaCatalogoToolStripMenuItem.Size = new System.Drawing.Size(187, 22); + this.creaCatalogoToolStripMenuItem.Text = "Crea catalogo"; + // + // esciToolStripMenuItem + // + this.esciToolStripMenuItem.Name = "esciToolStripMenuItem"; + this.esciToolStripMenuItem.Size = new System.Drawing.Size(187, 22); + this.esciToolStripMenuItem.Text = "Esci"; + // + // aiutoToolStripMenuItem + // + this.aiutoToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.informazioniToolStripMenuItem}); + this.aiutoToolStripMenuItem.Name = "aiutoToolStripMenuItem"; + this.aiutoToolStripMenuItem.Size = new System.Drawing.Size(48, 20); + this.aiutoToolStripMenuItem.Text = "Aiuto"; + // + // informazioniToolStripMenuItem + // + this.informazioniToolStripMenuItem.Name = "informazioniToolStripMenuItem"; + this.informazioniToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.informazioniToolStripMenuItem.Text = "Informazioni"; + this.informazioniToolStripMenuItem.Click += new System.EventHandler(this.informazioniToolStripMenuItem_Click); + // + // groupBox12 + // + this.groupBox12.Controls.Add(this.txtFileInfo); + this.groupBox12.Controls.Add(this.lblLog); + this.groupBox12.Controls.Add(this.btnStopCreazione); + this.groupBox12.Controls.Add(this.lblFotoTotaliNum); + this.groupBox12.Controls.Add(this.CheckBox22); + this.groupBox12.Controls.Add(this.Label18); + this.groupBox12.Controls.Add(this.Label43); + this.groupBox12.Controls.Add(this.Label19); + this.groupBox12.Controls.Add(this.Label20); + this.groupBox12.Location = new System.Drawing.Point(539, 27); + this.groupBox12.Name = "groupBox12"; + this.groupBox12.Size = new System.Drawing.Size(204, 387); + this.groupBox12.TabIndex = 83; + this.groupBox12.TabStop = false; + this.groupBox12.Text = "Statistiche"; + // + // btnStopCreazione + // + this.btnStopCreazione.Location = new System.Drawing.Point(6, 20); + this.btnStopCreazione.Name = "btnStopCreazione"; + this.btnStopCreazione.Size = new System.Drawing.Size(192, 40); + this.btnStopCreazione.TabIndex = 82; + this.btnStopCreazione.Text = "STOP CREAZIONE"; + this.btnStopCreazione.UseVisualStyleBackColor = true; + this.btnStopCreazione.Click += new System.EventHandler(this.btnStopCreazione_Click); + // + // lblLog + // + this.lblLog.FormattingEnabled = true; + this.lblLog.Location = new System.Drawing.Point(6, 68); + this.lblLog.Name = "lblLog"; + this.lblLog.Size = new System.Drawing.Size(192, 95); + this.lblLog.TabIndex = 83; + // + // txtFileInfo + // + this.txtFileInfo.Enabled = false; + this.txtFileInfo.Location = new System.Drawing.Point(6, 170); + this.txtFileInfo.Multiline = true; + this.txtFileInfo.Name = "txtFileInfo"; + this.txtFileInfo.Size = new System.Drawing.Size(192, 109); + this.txtFileInfo.TabIndex = 84; + // + // panelTesto + // + this.panelTesto.Controls.Add(this.GroupBox5); + this.panelTesto.Controls.Add(this.GroupBox10); + this.panelTesto.Controls.Add(this.GroupBox9); + this.panelTesto.Controls.Add(this.GroupBox4); + this.panelTesto.Location = new System.Drawing.Point(3, 28); + this.panelTesto.Name = "panelTesto"; + this.panelTesto.Size = new System.Drawing.Size(504, 312); + this.panelTesto.TabIndex = 85; + // + // panelMiniature + // + this.panelMiniature.Controls.Add(this.GroupBox1); + this.panelMiniature.Location = new System.Drawing.Point(6, 36); + this.panelMiniature.Name = "panelMiniature"; + this.panelMiniature.Size = new System.Drawing.Size(501, 304); + this.panelMiniature.TabIndex = 27; + // + // MainForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(756, 427); + this.Controls.Add(this.groupBox12); + this.Controls.Add(this.TabControl1); + this.Controls.Add(this.menuStrip1); + this.Controls.Add(this.ProgressBar1); + this.MainMenuStrip = this.menuStrip1; + this.Name = "MainForm"; + this.Text = "Form1"; + this.Load += new System.EventHandler(this.Form1_Load); + this.TabControl1.ResumeLayout(false); + this.TabPage5.ResumeLayout(false); + this.GroupBox11.ResumeLayout(false); + this.GroupBox11.PerformLayout(); + this.GroupBox3.ResumeLayout(false); + this.GroupBox3.PerformLayout(); + this.GroupBox8.ResumeLayout(false); + this.GroupBox8.PerformLayout(); + this.GroupBox7.ResumeLayout(false); + this.GroupBox7.PerformLayout(); + this.TabPage3.ResumeLayout(false); + this.TabPage3.PerformLayout(); + this.GroupBox10.ResumeLayout(false); + this.GroupBox10.PerformLayout(); + this.GroupBox9.ResumeLayout(false); + this.GroupBox9.PerformLayout(); + this.GroupBox5.ResumeLayout(false); + this.GroupBox5.PerformLayout(); + this.GroupBox4.ResumeLayout(false); + this.GroupBox4.PerformLayout(); + this.TabPage2.ResumeLayout(false); + this.GroupBox2.ResumeLayout(false); + this.GroupBox2.PerformLayout(); + this.TabPage1.ResumeLayout(false); + this.GroupBox1.ResumeLayout(false); + this.GroupBox1.PerformLayout(); + this.Panel2.ResumeLayout(false); + this.Panel2.PerformLayout(); + this.TabPage4.ResumeLayout(false); + this.GroupBox6.ResumeLayout(false); + this.GroupBox6.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.PictureBox2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.PictureBox1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.PictureBox3)).EndInit(); + this.menuStrip1.ResumeLayout(false); + this.menuStrip1.PerformLayout(); + this.groupBox12.ResumeLayout(false); + this.groupBox12.PerformLayout(); + this.panelTesto.ResumeLayout(false); + this.panelMiniature.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + internal System.Windows.Forms.ProgressBar ProgressBar1; + internal System.Windows.Forms.CheckBox CheckBox22; + internal System.Windows.Forms.Label Label43; + internal System.Windows.Forms.TabControl TabControl1; + internal System.Windows.Forms.TabPage TabPage5; + internal System.Windows.Forms.GroupBox GroupBox11; + internal System.Windows.Forms.Label Label8; + internal System.Windows.Forms.TextBox TextBox8; + internal System.Windows.Forms.Label Label7; + internal System.Windows.Forms.TextBox TextBox7; + internal System.Windows.Forms.GroupBox GroupBox3; + internal System.Windows.Forms.CheckBox chkAggiornaSottodirectory; + internal System.Windows.Forms.Button Button3; + internal System.Windows.Forms.Button Button2; + internal System.Windows.Forms.Label Label1; + internal System.Windows.Forms.Label Label2; + internal System.Windows.Forms.TextBox txtSorgente; + internal System.Windows.Forms.TextBox txtDestinazione; + internal System.Windows.Forms.GroupBox GroupBox8; + internal System.Windows.Forms.RadioButton rdbNumFiles; + internal System.Windows.Forms.RadioButton rdbNumProgressiva; + internal System.Windows.Forms.TextBox txtCifreContatore; + internal System.Windows.Forms.Label Label34; + internal System.Windows.Forms.TextBox txtSuffissoCartelle; + internal System.Windows.Forms.Label Label33; + internal System.Windows.Forms.Label Label31; + internal System.Windows.Forms.CheckBox chkCreaSottocartelle; + internal System.Windows.Forms.TextBox txtFilePerCartella; + internal System.Windows.Forms.Label Label32; + internal System.Windows.Forms.GroupBox GroupBox7; + internal System.Windows.Forms.CheckBox chkSovrascriviFile; + internal System.Windows.Forms.CheckBox chkRotazioneAutomatica; + internal System.Windows.Forms.CheckBox chkForzaJpg; + internal System.Windows.Forms.TabPage TabPage3; + internal System.Windows.Forms.CheckBox CheckBox2; + internal System.Windows.Forms.GroupBox GroupBox10; + internal System.Windows.Forms.Label Label42; + internal System.Windows.Forms.Label Label41; + internal System.Windows.Forms.TextBox TextBox31; + internal System.Windows.Forms.TextBox TextBox30; + internal System.Windows.Forms.GroupBox GroupBox9; + internal System.Windows.Forms.CheckBox CheckBox17; + internal System.Windows.Forms.CheckBox CheckBox16; + internal System.Windows.Forms.GroupBox GroupBox5; + internal System.Windows.Forms.TextBox TextBox34; + internal System.Windows.Forms.Button Button8; + internal System.Windows.Forms.Label Label36; + internal System.Windows.Forms.TextBox TextBox25; + internal System.Windows.Forms.Label Label35; + internal System.Windows.Forms.ComboBox ComboBox3; + internal System.Windows.Forms.TextBox TextBox11; + internal System.Windows.Forms.Label Label12; + internal System.Windows.Forms.Label Label11; + internal System.Windows.Forms.CheckBox CheckBox3; + internal System.Windows.Forms.GroupBox GroupBox4; + internal System.Windows.Forms.Label Label40; + internal System.Windows.Forms.TextBox TextBox29; + internal System.Windows.Forms.TextBox TextBox18; + internal System.Windows.Forms.Label Label26; + internal System.Windows.Forms.DateTimePicker DateTimePicker1; + internal System.Windows.Forms.CheckBox CheckBox8; + internal System.Windows.Forms.TextBox TextBox9; + internal System.Windows.Forms.CheckBox CheckBox7; + internal System.Windows.Forms.Label Label4; + internal System.Windows.Forms.TextBox TextBox4; + internal System.Windows.Forms.Label Label9; + internal System.Windows.Forms.Label Label13; + internal System.Windows.Forms.ComboBox ComboBox1; + internal System.Windows.Forms.ComboBox ComboBox2; + internal System.Windows.Forms.Label Label14; + internal System.Windows.Forms.TextBox TextBox12; + internal System.Windows.Forms.Label Label15; + internal System.Windows.Forms.TabPage TabPage2; + internal System.Windows.Forms.GroupBox GroupBox2; + internal System.Windows.Forms.Label Label45; + internal System.Windows.Forms.TextBox TextBox32; + internal System.Windows.Forms.TextBox TextBox26; + internal System.Windows.Forms.Label Label37; + internal System.Windows.Forms.Label Label38; + internal System.Windows.Forms.TextBox TextBox27; + internal System.Windows.Forms.Label Label39; + internal System.Windows.Forms.TextBox TextBox28; + internal System.Windows.Forms.CheckBox CheckBox15; + internal System.Windows.Forms.TabPage TabPage1; + internal System.Windows.Forms.GroupBox GroupBox1; + internal System.Windows.Forms.Label Label46; + internal System.Windows.Forms.TextBox TextBox33; + internal System.Windows.Forms.Panel Panel2; + internal System.Windows.Forms.RadioButton RadioButton3; + internal System.Windows.Forms.RadioButton RadioButton7; + internal System.Windows.Forms.RadioButton RadioButton4; + internal System.Windows.Forms.RadioButton RadioButton6; + internal System.Windows.Forms.RadioButton RadioButton5; + internal System.Windows.Forms.Label Label5; + internal System.Windows.Forms.TextBox TextBox5; + internal System.Windows.Forms.Label Label6; + internal System.Windows.Forms.TextBox TextBox6; + internal System.Windows.Forms.Label Label3; + internal System.Windows.Forms.TextBox TextBox3; + internal System.Windows.Forms.CheckBox CheckBox1; + internal System.Windows.Forms.TabPage TabPage4; + internal System.Windows.Forms.GroupBox GroupBox6; + internal System.Windows.Forms.PictureBox PictureBox2; + internal System.Windows.Forms.PictureBox PictureBox1; + internal System.Windows.Forms.ComboBox ComboBox5; + internal System.Windows.Forms.ComboBox ComboBox4; + internal System.Windows.Forms.TextBox TextBox19; + internal System.Windows.Forms.Label Label28; + internal System.Windows.Forms.CheckBox CheckBox5; + internal System.Windows.Forms.TextBox TextBox15; + internal System.Windows.Forms.TextBox TextBox14; + internal System.Windows.Forms.Label Label25; + internal System.Windows.Forms.TextBox TextBox16; + internal System.Windows.Forms.Label Label24; + internal System.Windows.Forms.Label Label22; + internal System.Windows.Forms.Label Label23; + internal System.Windows.Forms.Button Button4; + internal System.Windows.Forms.TextBox TextBox10; + internal System.Windows.Forms.Label Label29; + internal System.Windows.Forms.Label Label30; + internal System.Windows.Forms.PictureBox PictureBox3; + internal System.Windows.Forms.Label Label20; + internal System.Windows.Forms.Label Label19; + internal System.Windows.Forms.Label Label18; + internal System.Windows.Forms.Label lblFotoTotaliNum; + private System.Windows.Forms.MenuStrip menuStrip1; + private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem caricaImpostazioniToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem salvaImpostazioniToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem creaCatalogoToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem aiutoToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem informazioniToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem esciToolStripMenuItem; + private System.Windows.Forms.GroupBox groupBox12; + private System.Windows.Forms.Button btnStopCreazione; + private System.Windows.Forms.ListBox lblLog; + private System.Windows.Forms.TextBox txtFileInfo; + private System.Windows.Forms.Panel panelTesto; + private System.Windows.Forms.Panel panelMiniature; + + } +} + diff --git a/ImageCatalogCS/MainForm.cs b/ImageCatalogCS/MainForm.cs new file mode 100644 index 0000000..c11509f --- /dev/null +++ b/ImageCatalogCS/MainForm.cs @@ -0,0 +1,548 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.IO; +using System.Drawing.Text; +using System.Threading; + +public delegate void XyThreadAdd(string Info); + +namespace ImageCatalogCS +{ + public partial class MainForm : Form + { + private bool stopAttivo; + private bool waterSelectColor = false; + + //pool + private XYThreadPool myPool = new XYThreadPool(); + + private int contaImmaginiThread; + + private int maxThreads = 15; + private int minThreads = 5; + + public MainForm() + { + InitializeComponent(); + } + + private void setDefaults() + { + txtSorgente.Text = ""; + txtDestinazione.Text = ""; + TextBox3.Text = "tn_"; + TextBox4.Text = ""; + TextBox5.Text = "350"; + TextBox6.Text = "350"; + TextBox27.Text = "2240"; + TextBox28.Text = "2240"; + TextBox9.Text = "0"; + TextBox11.Text = "20"; + TextBox12.Text = "8"; + //TextBox13.Text = "" + TextBox10.Text = ""; + TextBox14.Text = "430"; + TextBox15.Text = "430"; + TextBox16.Text = "290"; + txtFilePerCartella.Text = "99"; + TextBox19.Text = "100"; + txtSuffissoCartelle.Text = ""; + txtCifreContatore.Text = "2"; + TextBox25.Text = "50"; + TextBox26.Text = ""; + TextBox7.Text = Convert.ToString(15); + TextBox8.Text = Convert.ToString(5); + TextBox34.Text = "Yellow"; + TextBox30.Text = "20"; + TextBox31.Text = "6"; + TextBox32.Text = "85"; + TextBox33.Text = "30"; + + + ComboBox1.Items.Add("Alto"); + ComboBox1.Items.Add("Basso"); + ComboBox1.SelectedIndex = 1; + + ComboBox2.Items.Add("Sinistra"); + ComboBox2.Items.Add("Centro"); + ComboBox2.Items.Add("Destra"); + ComboBox2.SelectedIndex = 1; + + // Create a obejct of InstalledFontCollection + InstalledFontCollection InstalledFonts = new InstalledFontCollection(); + // Gets the array of FontFamily objects associated with this FontCollection. + FontFamily[] fontfamilies = InstalledFonts.Families; + + // Populates font combobox with the font name + + foreach (FontFamily fontFamily in fontfamilies) + { + ComboBox3.Items.Add(fontFamily.Name); + } + + ComboBox3.Text = ComboBox3.Items[0].ToString(); + + ComboBox4.Items.Add("Sinistra"); + ComboBox4.Items.Add("Centro"); + ComboBox4.Items.Add("Destra"); + ComboBox4.SelectedIndex = 2; + + ComboBox5.Items.Add("Alto"); + ComboBox5.Items.Add("Centro"); + ComboBox5.Items.Add("Basso"); + ComboBox5.SelectedIndex = 2; + } + + private void Form1_Load(object sender, EventArgs e) + { + Application.EnableVisualStyles(); + setDefaults(); + } + + private void btnCreaCatalogo_Click(object sender, EventArgs e) + { + DateTime timestart; + DateTime timeStop; + + timestart = DateTime.Now; + + txtFileInfo.Text = string.Empty; + lblFotoTotaliNum.Text = "0"; + Label18.Text = "0"; + Label43.Text = "-s"; + + maxThreads = Convert.ToInt32(TextBox7.Text); + minThreads = Convert.ToInt32(TextBox18.Text); + + //setPicSettings(txtSorgente.Text, txtDestinazione.Text); + makeSettingsFromForm(); + ProgressBar1.Minimum = 0; + ProgressBar1.Step = 1; + ProgressBar1.Value = 0; + + System.Threading.Thread t1 = new System.Threading.Thread(creaCatalogoThread); + + + } + + private void creaCatalogoThread() +{ + System.DateTime timeStart = DateTime.Now; + myPool.StopThreadPool(); + myPool.StartThreadPool(minThreads, maxThreads); + contaImmaginiThread = 0; + + //creaImmaginiWithThreadMod(txtSorgente.Text, txtDestinazione.Text) + //creaimmaginiWithThreadDict(txtSorgente.Text, txtDestinazione.Text); + ThreadPoolWorkItem ThAttivo = null; + //int i = 0; + + // fine + + +} + + private int getNumerazione() + { + int numerazione = 0; + if (rdbNumProgressiva.Checked) + { + numerazione = (int)FileHelper.numerazione.Progressiva; + } + else + { + numerazione = (int)FileHelper.numerazione.Files; + } + return numerazione; + } + + private void creaimmaginiWithThreadDict(string SourcePath, string DestPath) +{ + Dictionary dirSourceDest = new Dictionary(); + + if (chkAggiornaSottodirectory.Checked & chkCreaSottocartelle.Checked) { + FileHelper helper = new FileHelper(Convert.ToInt32(txtFilePerCartella.Text), txtSuffissoCartelle.Text, Convert.ToInt32(txtCifreContatore.Text), getNumerazione()); + //getfilesrecursive + dirSourceDest = helper.GetFilesRecursive(new DirectoryInfo(SourcePath), new DirectoryInfo(DestPath), "*.jpg"); + + } else if (chkAggiornaSottodirectory.Checked & !chkCreaSottocartelle.Checked) { + + } + //else if () + + //= getDirsDict(SourcePath, DestPath) + + KeyValuePair pair = default(KeyValuePair); + + foreach (KeyValuePair pair_loopVariable in dirSourceDest) { + pair = pair_loopVariable; + //setLabel10Text("File: " + pair.Key.Name); + string b = (Convert.ToInt32(Label18.Text) + 1).ToString(); + + ImageCreator ClsCreaImmagine = new ImageCreator(pair.Key, pair.Value); + contaImmaginiThread += 1; + myPool.InsertWorkItem(pair.Key.Name, new XyThreadAdd(ClsCreaImmagine.CreaImmagineThread), new object[1] { pair.Key.Name }, true); + + } + +} + + private Dictionary makeSettingsFromForm() + { + Dictionary settingsDict = new Dictionary(); + settingsDict.Add("sourceDirRoot", new DirectoryInfo(txtSorgente.Text)); + settingsDict.Add("destDirRoot", new DirectoryInfo(txtDestinazione.Text)); + + settingsDict.Add("DirDividiDestinazione", chkCreaSottocartelle.Checked); + settingsDict.Add("DirDividiNumFile", txtFilePerCartella.Text); + settingsDict.Add("DirDividiSuffisso", txtSuffissoCartelle.Text); + settingsDict.Add("DirDividiNumCifre", txtCifreContatore.Text); + + settingsDict.Add("DirDividiTipoNumerazione", rdbNumProgressiva.Checked ? "Progressiva" : "Files"); + + // if (rdbNumProgressiva.Checked) + // settingsDict.Add("DirDividiTipoNumerazione", "Progressiva"); + //else + // settingsDict.Add("DirDividiTipoNumerazione", "Files"); + + // Checkbox + settingsDict.Add("creaMiniature", CheckBox1.Checked); + settingsDict.Add("aggiungiTesto", CheckBox2.Checked); + settingsDict.Add("grassetto", CheckBox3.Checked); + settingsDict.Add("logoAggiungi", CheckBox5.Checked); + settingsDict.Add("usaOrarioTestoApplicare", CheckBox8.Checked); + //settingsDict.Add("usaOrarioMiniatura", CheckBox12.Checked); + settingsDict.Add("fotoGrandeDimOrigina", CheckBox15.Checked); + + settingsDict.Add("dimStandard", Convert.ToInt32(TextBox11.Text)); + settingsDict.Add("dimStandardMiniatura", Convert.ToInt32(TextBox25.Text)); + + + + + settingsDict.Add("usaRotazioneAutomatica", chkRotazioneAutomatica.Checked); + settingsDict.Add("usaForzaJpg", chkForzaJpg.Checked); + + settingsDict.Add("testoNome", CheckBox17.Checked); + settingsDict.Add("nomeData", CheckBox16.Checked); + + settingsDict.Add("testoFirmaStart", TextBox4.Text); + settingsDict.Add("testoFirmaStartV", TextBox29.Text); + + settingsDict.Add("dataPartenza", DateTimePicker1.Value); + settingsDict.Add("testoOrario", TextBox18.Text); + + settingsDict.Add("altezzaSmall", Convert.ToInt32(TextBox6.Text)); + settingsDict.Add("larghezzaSmall", Convert.ToInt32(TextBox5.Text)); + + + settingsDict.Add("aggiungiScritteMiniature", RadioButton3.Checked); + settingsDict.Add("aggTempoGaraMin", RadioButton5.Checked); + settingsDict.Add("aggNumTempMin", RadioButton7.Checked); + + settingsDict.Add("dimVert", Convert.ToUInt32(TextBox30.Text)); + settingsDict.Add("margVert", Convert.ToInt32(TextBox31.Text)); + + settingsDict.Add("suffisso", TextBox3.Text); + settingsDict.Add("trasparenza", Convert.ToInt32(TextBox9.Text)); + settingsDict.Add("ilFont", ComboBox3.SelectedItem.ToString()); + + + settingsDict.Add("posizione", ComboBox1.SelectedItem.ToString()); + settingsDict.Add("allineamento", ComboBox2.SelectedItem.ToString()); + settingsDict.Add("margine", Convert.ToInt32(TextBox12.Text)); + + settingsDict.Add("logoAltezza", Convert.ToInt32(TextBox14.Text)); + settingsDict.Add("logoLarghezza", Convert.ToInt32(TextBox15.Text)); + + settingsDict.Add("fontColoreRGB", ColorTranslator.FromHtml(TextBox34.Text)); + + + settingsDict.Add("logoNomeFile", TextBox10.Text); + settingsDict.Add("logoTrasparenza", TextBox19.Text); + settingsDict.Add("logoMargine", TextBox16.Text); + settingsDict.Add("logoPosizioneH", ComboBox4.Text); + settingsDict.Add("logoPosizioneV", ComboBox5.Text); + + + settingsDict.Add("altezzaBig", Convert.ToInt32(TextBox27.Text)); + settingsDict.Add("larghezzaBig", Convert.ToInt32(TextBox28.Text)); + settingsDict.Add("dimMin", Convert.ToInt32(TextBox25.Text)); + + settingsDict.Add("testoMin", RadioButton6.Checked); + + settingsDict.Add("jpegQuality", Convert.ToInt32(TextBox32.Text)); + settingsDict.Add("jpegQualityMin", Convert.ToInt32(TextBox33.Text)); + + return settingsDict; + } + + private void setPicSettings(string SourcePath, string DestPath) + { + DirectoryInfo SourceDir = new DirectoryInfo(SourcePath); + DirectoryInfo DestDirStart = new DirectoryInfo(DestPath); + DirectoryInfo DestDir = null; + + PicSettings.directorySorgente = txtSorgente.Text; + PicSettings.directoryDestinazione = txtDestinazione.Text; + + + PicSettings.dimStandard = Convert.ToInt32(TextBox11.Text); + PicSettings.dimStandardMiniatura = Convert.ToInt32(TextBox25.Text); + + //PicSettings.UsaOrarioMiniatura = CheckBox12.Checked; + PicSettings.UsaOrarioTestoApplicare = CheckBox8.Checked; + PicSettings.UsaTempoGaraTestoApplicare = CheckBox7.Checked; + + PicSettings.UsaRotazioneAutomatica = chkRotazioneAutomatica.Checked; + PicSettings.UsaForzaJpg = chkForzaJpg.Checked; + + if (CheckBox17.Checked) + { + PicSettings.TestoNome = true; + } + else + { + PicSettings.TestoNome = false; + + } + + if (CheckBox16.Checked) + { + PicSettings.NomeData = true; + } + else + { + PicSettings.NomeData = false; + } + PicSettings.TestoFirmaStart = TextBox4.Text; + PicSettings.TestoFirmaStartV = TextBox29.Text; + + PicSettings.DataPartenza = DateTimePicker1.Value; + PicSettings.TestoOrario = TextBox18.Text; + + PicSettings.AltezzaSmall = Convert.ToInt32(TextBox6.Text); + PicSettings.LarghezzaSmall = Convert.ToInt32(TextBox5.Text); + + PicSettings.CreaMiniature = CheckBox1.Checked; + PicSettings.AggiungiScritteMiniature = RadioButton3.Checked; + PicSettings.AggTempoGaraMin = RadioButton5.Checked; + PicSettings.AggNumTempMin = RadioButton7.Checked; + + + PicSettings.dimVert = Convert.ToInt32(TextBox30.Text); + PicSettings.margVert = Convert.ToInt32(TextBox31.Text); + + //PicSettings.NomeFileChild = childFile.Name + PicSettings.Suffisso = TextBox3.Text; + //PicSettings.Codice = TextBox13.Text + + PicSettings.Trasparenza = Convert.ToInt32(TextBox9.Text); + PicSettings.IlFont = ComboBox3.SelectedItem.ToString(); + PicSettings.Grassetto = CheckBox3.Checked; + + PicSettings.Posizione = ComboBox1.SelectedItem.ToString(); + PicSettings.Allineamento = ComboBox2.SelectedItem.ToString(); + PicSettings.Margine = Convert.ToInt32(TextBox12.Text); + + PicSettings.LogoAltezza = Convert.ToInt32(TextBox14.Text); + PicSettings.LogoLarghezza = Convert.ToInt32(TextBox15.Text); + + PicSettings.fontColoreRGB = ColorTranslator.FromHtml(TextBox34.Text); + + PicSettings.LogoAggiungi = CheckBox5.Checked; + PicSettings.LogoNomeFile = TextBox10.Text; + PicSettings.LogoTrasparenza = TextBox19.Text; + PicSettings.LogoMargine = TextBox16.Text; + PicSettings.LogoPosizioneH = ComboBox4.Text; + PicSettings.LogoPosizioneV = ComboBox5.Text; + + PicSettings.FotoGrandeDimOrigina = CheckBox15.Checked; + PicSettings.AltezzaBig = Convert.ToInt32(TextBox27.Text); + PicSettings.LarghezzaBig = Convert.ToInt32(TextBox28.Text); + PicSettings.DimMin = Convert.ToInt32(TextBox25.Text); + + PicSettings.TestoMin = RadioButton6.Checked; + + PicSettings.jpegQuality = Convert.ToInt64(TextBox32.Text); + PicSettings.jpegQualityMin = Convert.ToInt64(TextBox33.Text); + + PicSettings.mainForm = this; + + + } + + private void makeSettingsFromFile() + { + OpenFileDialog openFileDialog = new OpenFileDialog(); + openFileDialog.Filter = "Setup (*.xml)|*.xml|All valid files (*.*)|*.*"; + openFileDialog.FilterIndex = 0; + openFileDialog.RestoreDirectory = true; + + Dictionary settingsDict = new Dictionary(StringComparer.OrdinalIgnoreCase); + + if (DialogResult.OK == openFileDialog.ShowDialog()) + { + XMLSettings xmlSettings = new XMLSettings(openFileDialog.FileName); + settingsDict = xmlSettings.getParametriDict(); + + + settingsDict = bindSettings(settingsDict); + setLogoMiniature(); + this.Text = string.Format("Image Catalog - {0}", openFileDialog.FileName); + + + } + } + + private void setLogoMiniature() + { + if (File.Exists(TextBox10.Text)) + { + + PictureBox1.Image = Image.FromFile(TextBox10.Text); + if (PictureBox1.Image.Height >= PictureBox1.Image.Width) + { + PictureBox1.Height = 160; + PictureBox1.Width = Convert.ToInt32(160 * PictureBox1.Image.Width / PictureBox1.Image.Height); + } + else + { + PictureBox1.Width = 224; + PictureBox1.Height = Convert.ToInt32(224 * PictureBox1.Image.Height / PictureBox1.Image.Width); + } + } + } + + private Dictionary bindSettings(Dictionary dict) + { + + txtSorgente.Text = dict["dirSorgente"].ToString(); + txtDestinazione.Text = dict["dirDestinazione"].ToString(); + chkAggiornaSottodirectory.Checked = Convert.ToBoolean(dict["DirSottoDirectory"]); + + chkCreaSottocartelle.Checked = Convert.ToBoolean(dict["dirDividiDestinazione"]); + txtFilePerCartella.Text = dict["dirDividiNumFile"].ToString(); + txtSuffissoCartelle.Text = dict["dirDividiSuffisso"].ToString(); + txtCifreContatore.Text = dict["dirDividiNumCifre"].ToString(); + + if (dict["dirDividiTipoNumerazione"].ToString().ToUpper() == "PROGRESSIVA") + rdbNumProgressiva.Checked = true; + else + rdbNumFiles.Checked = true; + + CheckBox1.Checked = Convert.ToBoolean(dict["miniatureCrea"]); + TextBox3.Text = dict["miniatureSuffisso"].ToString(); + TextBox5.Text = dict["miniatureAltezza"].ToString(); + TextBox6.Text = dict["miniatureLarghezza"].ToString(); + RadioButton3.Checked = Convert.ToBoolean(dict["miniatureAddScritta"]); + RadioButton4.Checked = Convert.ToBoolean(dict["miniatureAddOrario"]); + + TextBox27.Text = dict["fotoAltezza"].ToString(); + TextBox28.Text = dict["fotoLarghezza"].ToString(); + + TextBox11.Text = dict["fontDimensione"].ToString(); + TextBox25.Text = dict["fontDimensioneMiniatura"].ToString(); + CheckBox3.Checked = Convert.ToBoolean(dict["fontBold"]); + ComboBox3.Text = dict["fontNome"].ToString(); + + TextBox4.Text = dict["testoTesto"].ToString(); + TextBox9.Text = dict["testoTrasparente"].ToString(); + TextBox12.Text = dict["testoMargine"].ToString(); + ComboBox1.Text = dict["testoPosizione"].ToString(); + ComboBox2.Text = dict["testoAllineamento"].ToString(); + + TextBox10.Text = dict["marchioFile"].ToString(); + TextBox14.Text = dict["marchioAltezza"].ToString(); + TextBox15.Text = dict["marchioLarghezza"].ToString(); + TextBox16.Text = dict["marchioMargine"].ToString(); + ComboBox4.Text = dict["marchioAllOrizzontale"].ToString(); + ComboBox5.Text = dict["marchioAllVerticale"].ToString(); + TextBox19.Text = dict["marchioTrasparenza"].ToString(); + CheckBox5.Checked = Convert.ToBoolean(dict["MarchioAggiungi"]); + + CheckBox7.Checked = Convert.ToBoolean(dict["tempoGara"]); + CheckBox8.Checked = Convert.ToBoolean(dict["orario"]); + TextBox18.Text = dict["etichettaOrario"].ToString(); + + chkForzaJpg.Checked = Convert.ToBoolean(dict["generaleForzaJpg"]); + chkRotazioneAutomatica.Checked = Convert.ToBoolean(dict["generaleRotazioneAutomatica"]); + + TextBox30.Text = dict["grandezzaVerticale"].ToString(); + TextBox31.Text = dict["margineVerticale"].ToString(); + CheckBox15.Checked = Convert.ToBoolean(dict["dimensioniOriginali"]); + TextBox29.Text = dict["testoVerticale"].ToString(); + RadioButton6.Checked = Convert.ToBoolean(dict["nomeMiniatura"]); + CheckBox16.Checked = Convert.ToBoolean(dict["dataFoto"]); + CheckBox17.Checked = Convert.ToBoolean(dict["numeroFoto"]); + + + RadioButton5.Checked = Convert.ToBoolean(dict["tempoSmall"]); + RadioButton7.Checked = Convert.ToBoolean(dict["numTempoSmall"]); + + TextBox32.Text = dict["compressioneJpeg"].ToString(); + TextBox33.Text = dict["compressioneJpegMiniatura"].ToString(); + + TextBox34.Text = dict["coloreTestoRGB"].ToString(); + + + + return dict; + } + + + + + private void caricaImpostazioniToolStripMenuItem_Click(object sender, EventArgs e) + { + makeSettingsFromFile(); + } + + private void btnStopCreazione_Click(object sender, EventArgs e) + { + + } + + private void informazioniToolStripMenuItem_Click(object sender, EventArgs e) + { + AboutForm about = new AboutForm(); + about.Show(); + } + + private void CheckBox2_CheckedChanged(object sender, EventArgs e) + { + if (CheckBox2.Checked) + panelTesto.Enabled = true; + else + panelTesto.Enabled = false; + } + + private void CheckBox1_CheckedChanged(object sender, EventArgs e) + { + if (CheckBox1.Checked) + panelMiniature.Enabled = true; + else + panelMiniature.Enabled = false; + } + + + + + + + + + + + + + + } +} diff --git a/ImageCatalogCS/MainForm.resx b/ImageCatalogCS/MainForm.resx new file mode 100644 index 0000000..d5494e3 --- /dev/null +++ b/ImageCatalogCS/MainForm.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/ImageCatalogCS/PicSettings.cs b/ImageCatalogCS/PicSettings.cs new file mode 100644 index 0000000..9f930c8 --- /dev/null +++ b/ImageCatalogCS/PicSettings.cs @@ -0,0 +1,92 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ImageCatalogCS +{ + static class PicSettings + { + // Root + public static string directorySorgente { get; set; } + public static string directoryDestinazione { get; set; } + + public static int dimVert { get; set; } + public static int margVert { get; set; } + + public static int dimStandard { get; set; } + public static int dimStandardMiniatura { get; set; } + + public static bool NomeData { get; set; } + public static bool TestoNome { get; set; } + public static bool UsaOrarioMiniatura { get; set; } + public static bool UsaOrarioTestoApplicare { get; set; } + public static bool UsaTempoGaraTestoApplicare { get; set; } + public static string TestoFirmaStart { get; set; } + public static string TestoFirmaStartV { get; set; } + public static DateTime DataPartenza { get; set; } + + public static string TestoOrario { get; set; } + public static bool UsaRotazioneAutomatica { get; set; } + + public static bool UsaForzaJpg { get; set; } + public static int LarghezzaSmall { get; set; } + + public static int AltezzaSmall { get; set; } + public static bool CreaMiniature { get; set; } + public static bool AggiungiScritteMiniature { get; set; } + public static bool AggTempoGaraMin { get; set; } + + public static bool AggNumTempMin { get; set; } + public static string Suffisso { get; set; } + + public static string Codice { get; set; } + public static int Trasparenza { get; set; } + public static string IlFont { get; set; } + + public static bool Grassetto { get; set; } + public static string Posizione { get; set; } + public static string Allineamento { get; set; } + + public static int Margine { get; set; } + public static int LogoAltezza { get; set; } + + public static int LogoLarghezza { get; set; } + + public static Color fontColoreRGB { get; set; } + public static bool LogoAggiungi { get; set; } + public static string LogoNomeFile { get; set; } + public static string LogoTrasparenza { get; set; } + public static string LogoMargine { get; set; } + public static string LogoPosizioneH { get; set; } + + public static string LogoPosizioneV { get; set; } + public static bool FotoGrandeDimOrigina { get; set; } + public static int AltezzaBig { get; set; } + public static int LarghezzaBig { get; set; } + public static DirectoryInfo DestDir { get; set; } + + public static int DimMin { get; set; } + + public static bool TestoMin { get; set; } + public static bool SecretDefault { get; set; } + public static bool SecretBig { get; set; } + + public static bool SecretSmall { get; set; } + public static string SecretPathSmall { get; set; } + + public static string SecretPathBig { get; set; } + public static long jpegQuality { get; set; } + + public static long jpegQualityMin { get; set; } + public static bool FotoRuotaADestra { get; set; } // Default False + + public static bool FotoRuotaASinistra { get; set; } // Default False + + public static string TempMinText { get; set; } // Default "" + public static MainForm mainForm { get; set; } + } +} diff --git a/ImageCatalogCS/Program.cs b/ImageCatalogCS/Program.cs new file mode 100644 index 0000000..9c2ec36 --- /dev/null +++ b/ImageCatalogCS/Program.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ImageCatalogCS +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new MainForm()); + } + } +} diff --git a/ImageCatalogCS/Properties/AssemblyInfo.cs b/ImageCatalogCS/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..97f38c2 --- /dev/null +++ b/ImageCatalogCS/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("ImageCatalogCS")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("ImageCatalogCS")] +[assembly: AssemblyCopyright("Copyright © 2012")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("00b0a7a5-0de0-48e6-b0c9-ec214aa338dd")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/ImageCatalogCS/Properties/Resources.Designer.cs b/ImageCatalogCS/Properties/Resources.Designer.cs new file mode 100644 index 0000000..9c3a10e --- /dev/null +++ b/ImageCatalogCS/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.18010 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace ImageCatalogCS.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ImageCatalogCS.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/ImageCatalogCS/Properties/Resources.resx b/ImageCatalogCS/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/ImageCatalogCS/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ImageCatalogCS/Properties/Settings.Designer.cs b/ImageCatalogCS/Properties/Settings.Designer.cs new file mode 100644 index 0000000..684a319 --- /dev/null +++ b/ImageCatalogCS/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.18010 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace ImageCatalogCS.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/ImageCatalogCS/Properties/Settings.settings b/ImageCatalogCS/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/ImageCatalogCS/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/ImageCatalogCS/Temperature.cs b/ImageCatalogCS/Temperature.cs new file mode 100644 index 0000000..a56ed82 --- /dev/null +++ b/ImageCatalogCS/Temperature.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Management; + + + +namespace ImageCatalogCS +{ + public class Temperature + { + public double CurrentValue { get; set; } + public string InstanceName { get; set; } + public static List Temperatures + { + get + { + List result = new List(); + ManagementObjectSearcher searcher = new ManagementObjectSearcher(@"root\WMI", "SELECT * FROM MSAcpi_ThermalZoneTemperature"); + foreach (ManagementObject obj in searcher.Get()) + { + Double temp = Convert.ToDouble(obj["CurrentTemperature"].ToString()); + temp = (temp - 2732) / 10.0; + result.Add(new Temperature { CurrentValue = temp, InstanceName = obj["InstanceName"].ToString() }); + } + return result; + + } + } + } +} diff --git a/ImageCatalogCS/XMLSettings.cs b/ImageCatalogCS/XMLSettings.cs new file mode 100644 index 0000000..2443542 --- /dev/null +++ b/ImageCatalogCS/XMLSettings.cs @@ -0,0 +1,208 @@ +using Microsoft.VisualBasic; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Data; +using System.Diagnostics; +using System.IO; + +public class XMLSettings +{ + + + private DataSet _ElencoParametri; + + private string _NomeFileSetup; + public XMLSettings(string FileSetup) + { + _ElencoParametri = new DataSet(); + _NomeFileSetup = FileSetup; + + if (!string.IsNullOrEmpty(FileSetup)) + { + CaricaParametriSetup(); + } + } + + public XMLSettings() + { + _ElencoParametri = new DataSet(); + _NomeFileSetup = ""; + } + + public void CaricaParametriSetup() + { + _ElencoParametri = LeggiXmlDataSet("Setup", _NomeFileSetup, "Nome"); + } + + public void SalvaParametriSetup() + { + if (System.IO.File.Exists(_NomeFileSetup) == true) + { + File.Delete(_NomeFileSetup); + } + _ElencoParametri.WriteXml(_NomeFileSetup); + } + + public Dictionary getParametriDict() + { + CaricaParametriSetup(); + Dictionary dictParam = new Dictionary(StringComparer.OrdinalIgnoreCase); + + //DataRow[] LElenco = _ElencoParametri.Tables["Setup"].Select("Nome='" + NomeParametro + "'"); + //DataTable table = _ElencoParametri.Tables["Setup"]; + + foreach (DataRow row in _ElencoParametri.Tables["Setup"].Rows) + { + dictParam.Add(row["Nome"].ToString(), row["Valore"]); + } + + return dictParam; + } + + public string LeggiParametroString(string NomeParametro) + { + string Risposta = ""; + + try + { + DataRow[] LElenco = _ElencoParametri.Tables["Setup"].Select("Nome='" + NomeParametro + "'"); + + DataRow LaRiga = null; + foreach (DataRow LaRiga_loopVariable in LElenco) + { + LaRiga = LaRiga_loopVariable; + Risposta = LaRiga["Valore"].ToString(); + } + } + catch + { + Risposta = ""; + } + + return Risposta; + } + + public bool LeggiParametroBoolean(string NomeParametro) + { + string Risposta = ""; + + try + { + DataRow[] LElenco = _ElencoParametri.Tables["Setup"].Select("Nome='" + NomeParametro + "'"); + + DataRow LaRiga = null; + foreach (DataRow LaRiga_loopVariable in LElenco) + { + LaRiga = LaRiga_loopVariable; + Risposta = LaRiga["Valore"].ToString(); + } + } + catch + { + Risposta = ""; + } + + switch (Risposta.ToUpper()) + { + case "TRUE": + case "OK": + case "SI": + case "1": + case "YES": + case "VERO": + return true; + default: + return false; + } + } + + public void AggiornaParametro(string NomeParametro, object ValoreParametro) + { + try + { + if (_ElencoParametri.Tables["Setup"] == null) + { + DataTable TabellaTmp = new DataTable("Setup"); + DataRow RigaTmp = null; + + DataColumn LaColonna = null; + LaColonna = TabellaTmp.Columns.Add("Nome", System.Type.GetType("System.String")); + LaColonna = TabellaTmp.Columns.Add("Valore", System.Type.GetType("System.String")); + + //* Aggiunge alla tabella tutte le righe + RigaTmp = TabellaTmp.NewRow(); + RigaTmp["Nome"] = NomeParametro; + RigaTmp["Valore"] = ValoreParametro; + TabellaTmp.Rows.Add(RigaTmp); + + _ElencoParametri.Tables.Add(TabellaTmp); + } + else + { + DataRow[] LElenco = _ElencoParametri.Tables["Setup"].Select("Nome='" + NomeParametro + "'"); + + if (LElenco.Length == 0) + { + DataRow LaRiga = null; + LaRiga = _ElencoParametri.Tables["Setup"].NewRow(); + LaRiga["Nome"] = NomeParametro; + LaRiga["Valore"] = ValoreParametro; + _ElencoParametri.Tables["Setup"].Rows.Add(LaRiga); + } + else + { + LElenco[0]["Valore"] = ValoreParametro; + } + } + + } + catch + { + } + } + + + private DataTable LeggiXmlDataTable(string NomeTabella, string NomeFileXml, string NomeColonnaChiave = "") + { + //* Crea e Legge il dataset dal file xml + System.Data.DataSet DataSetXml = new System.Data.DataSet(); + DataSetXml.ReadXml(NomeFileXml); + + //* Aggiunge il campo chiave + if (!string.IsNullOrEmpty(NomeColonnaChiave)) + { + DataSetXml.Tables[NomeTabella].Constraints.Add(NomeColonnaChiave, DataSetXml.Tables[NomeTabella].Columns[NomeColonnaChiave], true); + } + + //* Restituisce la risposta + return DataSetXml.Tables[NomeTabella]; + } + + private static DataSet LeggiXmlDataSet(string NomeTabella, string NomeFileXml, string NomeColonnaChiave = "") + { + //* Crea e Legge il dataset dal file xml + DataSet DataSetXml = new DataSet(); + DataSetXml.ReadXml(NomeFileXml); + + //* Aggiunge il campo chiave + if (!string.IsNullOrEmpty(NomeColonnaChiave)) + { + DataSetXml.Tables[NomeTabella].Constraints.Add(NomeColonnaChiave, DataSetXml.Tables[NomeTabella].Columns[NomeColonnaChiave], true); + } + + //* Restituisce la risposta + return DataSetXml; + } + + + + + public string NomeFileSetup + { + get { return _NomeFileSetup; } + set { _NomeFileSetup = value; } + } + + +} \ No newline at end of file diff --git a/ImageCatalogCS/XYThreadPool.cs b/ImageCatalogCS/XYThreadPool.cs new file mode 100644 index 0000000..005b30c --- /dev/null +++ b/ImageCatalogCS/XYThreadPool.cs @@ -0,0 +1,251 @@ +using Microsoft.VisualBasic; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Data; +using System.Diagnostics; + +using System.Threading; + +public delegate void ThreadErrorHandlerDelegate(ThreadPoolWorkItem oWorkItem, Exception oError); + +public class ThreadPoolWorkItem +{ + public bool m_bStoreOutput = false; + public string m_sName = ""; + public Delegate m_pMethod = null; + public object[] m_pInput = null; + public object m_oOutput = null; + public Exception m_oException = null; + public ThreadPoolWorkItem() + { + } + public ThreadPoolWorkItem(string sName, Delegate pMethod, object[] pInput, bool bStoreOutput) + { + m_sName = sName; + m_pMethod = pMethod; + m_pInput = pInput; + m_bStoreOutput = bStoreOutput; + } +} + +public class XYThreadPool +{ + private Hashtable m_htThreads = new Hashtable(256); + private int m_nMinThreadCount = 5; + private int m_nMaxThreadCount = 10; + private int m_nShutdownPause = 200; + private int m_nServerPause = 25; + private bool m_bContinue = false; + private static Exception m_oException = null; + private Queue m_qInput = new Queue(1024); + private Queue m_qOutput = new Queue(1024); + private Delegate m_delegateThreadErrorHandler = new ThreadErrorHandlerDelegate(OnThreadError); + private void ThreadProc() + { + while (m_bContinue) + { + object obj = null; + Monitor.Enter(this); + if (m_qInput.Count > 0) + obj = m_qInput.Dequeue(); + Monitor.Exit(this); + if (obj == null) + { + bool bQuit = false; + Monitor.Enter(this); + if (m_htThreads.Count > m_nMinThreadCount) + { + m_htThreads.Remove(Thread.CurrentThread.Name); + bQuit = true; + } + Monitor.Exit(this); + if (bQuit) + return; + Thread.Sleep(10 * m_nServerPause); + } + else + { + ThreadPoolWorkItem oWorkItem = (ThreadPoolWorkItem)obj; + //oWorkItem.m_oOutput = oWorkItem.m_pMethod.DynamicInvoke(oWorkItem.m_pInput) + try + { + oWorkItem.m_oOutput = oWorkItem.m_pMethod.DynamicInvoke(oWorkItem.m_pInput); + } + catch (Exception oBug) + { + if ((m_delegateThreadErrorHandler != null)) + { + try + { + object[] pInput = { + oWorkItem, + oBug + }; + m_delegateThreadErrorHandler.DynamicInvoke(pInput); + } + catch + { + } + } + } + if (oWorkItem.m_bStoreOutput) + { + Monitor.Enter(m_qOutput); + m_qOutput.Enqueue(oWorkItem); + Monitor.Exit(m_qOutput); + } + Thread.Sleep(m_nServerPause); + } + } + } + private static void OnThreadError(ThreadPoolWorkItem oWorkItem, Exception oError) + { + if (oWorkItem == null) + { + m_oException = oError; + } + else + { + oWorkItem.m_oException = oError; + } + } + public void SetThreadErrorHandler(ThreadErrorHandlerDelegate pMethod) + { + Monitor.Enter(this); + m_delegateThreadErrorHandler = pMethod; + Monitor.Exit(this); + } + public void SetServerPause(int nMilliseconds) + { + Monitor.Enter(this); + if (nMilliseconds > 9 & nMilliseconds < 101) + m_nServerPause = nMilliseconds; + Monitor.Exit(this); + } + public void SetShutdownPause(int nMilliseconds) + { + Monitor.Enter(this); + m_nShutdownPause = nMilliseconds; + Monitor.Exit(this); + } + public Exception GetException() + { + return m_oException; + } + public void InsertWorkItem(ThreadPoolWorkItem oWorkItem) + { + try + { + Monitor.Enter(this); + m_qInput.Enqueue(oWorkItem); + if (m_bContinue && m_qInput.Count > m_htThreads.Count && m_htThreads.Count < m_nMaxThreadCount) + { + Thread th = new Thread(ThreadProc); + th.Name = Guid.NewGuid().ToString(); + m_htThreads.Add(th.Name, th); + th.Start(); + } + } + catch (Exception oBug) + { + m_oException = oBug; + } + finally + { + Monitor.Exit(this); + } + } + public void InsertWorkItem(string sName, Delegate pMethod, object[] pArgs, bool bStoreOutput) + { + InsertWorkItem(new ThreadPoolWorkItem(sName, pMethod, pArgs, bStoreOutput)); + } + public ThreadPoolWorkItem ExtractWorkItem() + { + object oWorkItem = null; + Monitor.Enter(m_qOutput); + if (m_qOutput.Count > 0) + oWorkItem = m_qOutput.Dequeue(); + Monitor.Exit(m_qOutput); + if (oWorkItem == null) + return null; + return (ThreadPoolWorkItem)oWorkItem; + } + public bool StartThreadPool(int nMinThreadCount = 5, int nMaxThreadCount = 10) + { + try + { + Monitor.Enter(this); + if (m_bContinue == false) + { + m_bContinue = true; + if (nMinThreadCount > 0) + { + m_nMinThreadCount = nMinThreadCount; + } + if (nMaxThreadCount > m_nMinThreadCount) + { + m_nMaxThreadCount = nMaxThreadCount; + } + else + { + m_nMaxThreadCount = 2 * m_nMinThreadCount; + } + int i = 0; + for (i = 1; i <= m_nMinThreadCount; i++) + { + Thread th = new Thread(ThreadProc); + th.Name = Guid.NewGuid().ToString(); + m_htThreads.Add(th.Name, th); + th.Start(); + } + } + return true; + } + catch (Exception oBug) + { + m_bContinue = false; + m_oException = oBug; + return false; + } + finally + { + Monitor.Exit(this); + } + } + public void StopThreadPool() + { + Monitor.Enter(this); + m_bContinue = false; + Thread.Sleep(Math.Max(200, m_nShutdownPause)); + if ((m_nShutdownPause > 0)) + { + IDictionaryEnumerator dict = m_htThreads.GetEnumerator(); + while (dict.MoveNext()) + { + Thread th = (Thread)dict.Value; + if (th.IsAlive) + { + try + { + th.Abort(); + } + catch + { + } + } + } + } + m_htThreads.Clear(); + m_qInput.Clear(); + // m_qOutput.Clear() + Monitor.Exit(this); + } + public int GetThreadCount() + { + Monitor.Enter(this); + int nCount = m_htThreads.Count; + Monitor.Exit(this); + return nCount; + } +} \ No newline at end of file diff --git a/WPFCatalog/App.config b/WPFCatalog/App.config new file mode 100644 index 0000000..8e15646 --- /dev/null +++ b/WPFCatalog/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/WPFCatalog/App.xaml b/WPFCatalog/App.xaml new file mode 100644 index 0000000..7e98dfe --- /dev/null +++ b/WPFCatalog/App.xaml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/WPFCatalog/App.xaml.cs b/WPFCatalog/App.xaml.cs new file mode 100644 index 0000000..ac50df1 --- /dev/null +++ b/WPFCatalog/App.xaml.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Data; +using System.Linq; +using System.Threading.Tasks; +using System.Windows; + +namespace WPFCatalog +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : Application + { + } +} diff --git a/WPFCatalog/Icons/camera-photo-5.png b/WPFCatalog/Icons/camera-photo-5.png new file mode 100644 index 0000000000000000000000000000000000000000..1e54dea89239f7aecab3e55382432a57c6c60e54 GIT binary patch literal 1231 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkEj_j@0&dJZ`)n?tl_D>YcrteH1n%v&r z_6D}Ly{R)T`VJp%U+u(U_=)Yn=RMi8mff8cWF)~OFv~$-WW{y$A1{yZestu=+3oSG z&-%`<+PkhrV8*hQ4ewnRUknIe7pLYMye{r1*HV%4X?dHU{>ck| zs(0@WS#7Fw`q{JI+3dR#C0qjge}50puz&x+!tD24v(58kk8ISvq@u{d^zUx|=RKci zEV-XtS~}Hxx}E&G32B;t>-d*GSbscw&PTgr*5=;!Ih!|bJNz+$VW-kr)vZyzZ`bDD zdOKmUiX>CfOy#944wp^VJktDE_l13#;i38c*D_eE=SXQ^&Zs#wS>6BV2j%{}<;_*M zMMau++<$!Y9pArWY%f0w28tA3$P_MhR$G2Mg#cHe}xXv-#y^E~XyA zxp~`9A3DSo931>4sOiiJqfXd0L&cpl=vk}N&X|36 zR#siFuT9OI5uz=6u{*hMGRsntvuTqJcr5E5+63w^3R~NB>hgxW7av*Fso9+0z3la` zwK}Jb8WcDl6>k>z+SPEbj{Eec6(L$J4;h2fmSlDXd2uNQExq!+>AH!r@n_8fu^&N~ zx18ouV|nwmav#qfwrkg~UoZFjqtCGHz5VvaE%BhFZ(8CSQR1ARo12WKm#mw4Gnb-4MGept&A*)L>|!Yha{nWDsIx zY-MC-Wn>7^Q1iRK5Jf|7eoAIqB~$~@2Ez~o3oBDIE0BJW4IybSR|7Q|ft=)%nVgze zoXU_|`z^)3Ja literal 0 HcmV?d00001 diff --git a/WPFCatalog/Icons/document-open-6.png b/WPFCatalog/Icons/document-open-6.png new file mode 100644 index 0000000000000000000000000000000000000000..fe03b7f429925fe2a0d967ce4ac873644a773707 GIT binary patch literal 1028 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmUzPnffIy#(^vlDyqr zfHV;NblzPLq&N#aB8!2v2N=7Z%(epwmK8Xr18J~%3^B*n9%f)*{Nw537-DgH>cq3& zA%POd>Yv|RtZZy%X4!2LzBcQ+Q_L2PNgf5lYk%F?dio#p;@o=2gCZ^g21;8z7K(`p zvNXClg^7qXb=KafSyi0Ar}(^kcX7L*{+Ex3BIkVm^yl2?J?l4I`?TDu^3jh=KYq-t zxsbK;?)#gyH}9qU&-dZ>J3s&EvCf0Y2MTI=7~45>E}r*JU;y5#YWRk z_2+L6r8w!UX%u{UwNQR)S@u@PU2#nMYAtMh{SHewRS!J6zNB=wLFbGIzpBn$%L5w{$|YkN(F5kei=+)V)ST;=l!vT@w@nB zzjaS+`1qQx+~o*lab`adrLB74*fin)dnU5n+4I)Wh#^k8r651bc^`X=>Qjc>>pmu_ z{yW%Ubm7{Bciw`gSu&F6R3BIwNs247g+%L3HxkHX*AVHxv$I_M!v=>9D_@-V@|rEU zI^Hfs#bKo&Gt>6un}Q%+xA%j6NPGtYeY$MQEFmIs%{F9U@$T;u+%j))HO5>F*LI>u&^>Q)HN`- zGB8kC_wWHs14yM6L>Ewlp@FV}k*<+Jh>@|Ck(rgDDMSOCbxb3QhTQy=%(P0V2A~aw zAqJLKh89-F77z_#T2`z;4W=L``D7-i<`t(hWR#Q?Sn2D7?aC}mP0r8F&Ce^=%P&gT z&w(f@*7tD_@X}xJ3eHBg8TSeyWzAeg&vO5@cg=ep*R+Vo@rCV@iHfs)A>3 zVtQ&&YGO)d;mK4Rpdwy~qSB(|R0hA&vizLHHU6d_ff6PNiTKbUADENN%ggmLlk@X* ovorJ3^?(l7FDS~-N=+^)*3ScL*Dtf(0?OwMp00i_>zopr0HQU2XaE2J literal 0 HcmV?d00001 diff --git a/WPFCatalog/Icons/face-smile-2.png b/WPFCatalog/Icons/face-smile-2.png new file mode 100644 index 0000000000000000000000000000000000000000..24ce7a54bee1de081c95a76806f889a35c462789 GIT binary patch literal 1235 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE(}6TtKSRv1wTBrPn7KV&978Nlr%v|Gh)I=bo&Wo;wf)BANB+lH zZr#}B5o^+8+L$5Qy-U#1iIvysU@Yf~)wiYwvButzat`B-xU*uVM@H@%-G43tQj^)d z7W)J%-S|_s$awOSnP*app4WY^yZ>4#WJzUsdZC3(#rekt*L!OnXBXX-b1CiYoW&@! z^pk@4nj8M}>*lWf|9h_WqhkUeiv*-U2=%r{^UL%vm#cAGSz+wqA#x@_^IuMWobA%y zILpfu9`x4Uees{Et*s!sx!#%UvxHbreyWK`4UUy z4@my*x%;tgS{ekt}^R9TRuU@Dh;*ZcQBo}}6huiwqJZY#kX63?F2!>&{5{m#E5RSSj=Ipl6nrGf)3-(>lN8FHB}<1h0ujo;_dm*Gnu}Ye(ta zkZJnSg%bCw9`F60dV6=>s_CaP^TKbP^!*yBtDC6A+wi*bPVoH`>$Yw0Jk3!0lKDEv*`k$L8nUW>zoz5M?3q8`t~_h) z{E0#A@wXX!e>yMkxP0-`jgKxn44XdIAAMnYgv}yPYWq8edwt?NO82f0nfkhB9#JiEjVMVjN=+$?Z| z=o{%7=;vgyt$bP0l+XkK^*s1x literal 0 HcmV?d00001 diff --git a/WPFCatalog/Icons/format-justify-left-2.png b/WPFCatalog/Icons/format-justify-left-2.png new file mode 100644 index 0000000000000000000000000000000000000000..d6abc0585efd6d5e4a41f17f3545b877c432432c GIT binary patch literal 3517 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 literal 0 HcmV?d00001 diff --git a/WPFCatalog/Icons/picture.png b/WPFCatalog/Icons/picture.png new file mode 100644 index 0000000000000000000000000000000000000000..b773744c72df584d44d74ae66da69639b820ba19 GIT binary patch literal 1075 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmUzPnffIy#(^vlDyqr zfHV;NblzPLq&N#aB8!2v2N=7Z%(epwmK8Xr18J~%3^B*n9%f)*{OIZ87-DgH>15mN z5J!==`NrSx?fsr6UZyC0*lm#t<3Xj4l|BC$xw)lRFWE5R3!`*>%YH|n^o3JfBP9Mi zI&9!*=~(cryC%nM_M1C%Et3T|r<{RzJq$VV6zLro8-Y zCtH?zQcHO8?I)hX;#2k>p0hqXwCzxCQd{M}6sGk`dj+}JkGV)R9?CHaysxHPyF4@6 z;(f>EDJMU&-M@DFidSg}y9qKGt3ES;>8*6da~>Bb-5cZ`QB9g2E4{?W4!o3=8v zPVwI461N?Orv9qg4?=(ET)ckp)jOs*(eDj*nwS9 z;lSaUNAEeC)E+3To}TlV`|EG+Gp?TVjn9|#Fg_95|7%a%`Rp6NuBg_@2pD=V0XnSQ z?S113`4EfU;*;iTcPMk(I%rNa&!2uhom+m{|8&d8972b)8Fs$1`p?Fee`_*x?ty*4 zl%QJT8c~v5l$uzQs+$5N7>o=IEOiYHbq&ozjEt-dEvyX9bq&m|3=EwgR%j8iFPNj{m$sd>ez z3>hUQ1y=g{V7oHQQj_y@bMy0x_413-^>ZLfiuIE!^^Nrm^cC`p6o^!Aq-Uz%-DZ;t za~{NH@BlE=H89pSGzu{?v@$ibGBkns$Nu+~=RggTAm;_=r9C%$#fm&t#wnnyONM1C<#gl*NYz`M`Wz sUS6)3mY54cdO$zx=OiZSXM!~97X!`EKXinb7pR@V)78&qol`;+06No>>Hq)$ literal 0 HcmV?d00001 diff --git a/WPFCatalog/MainWindow.xaml b/WPFCatalog/MainWindow.xaml new file mode 100644 index 0000000..acaeff7 --- /dev/null +++ b/WPFCatalog/MainWindow.xaml @@ -0,0 +1,424 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +