diff --git a/.forgejo/workflows/build-catalog-lite.yml b/.forgejo/workflows/build-catalog-lite.yml
new file mode 100644
index 0000000..8bf031a
--- /dev/null
+++ b/.forgejo/workflows/build-catalog-lite.yml
@@ -0,0 +1,206 @@
+name: Build Catalog Lite
+
+on:
+ workflow_dispatch:
+ inputs:
+ expiration_date:
+ description: Catalog Lite expiration date, yyyy-MM-dd
+ required: true
+ default: '2026-12-31'
+ type: string
+
+env:
+ DOTNET_VERSION: 10.0.x
+ PROJECT_PATH: CatalogLite/CatalogLite.csproj
+ CATALOG_LITE_EXPIRATION_DATE: ${{ inputs.expiration_date }}
+
+jobs:
+ build:
+ runs-on: docker
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - runtime: win-x64
+ artifact_name: catalog-lite-win-x64
+ executable_name: CatalogLite.exe
+ - runtime: linux-x64
+ artifact_name: catalog-lite-linux-x64
+ executable_name: CatalogLite
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - name: Setup .NET
+ uses: actions/setup-dotnet@v4
+ with:
+ dotnet-version: ${{ env.DOTNET_VERSION }}
+
+ - name: Validate expiration date
+ run: |
+ set -eu
+ case "${CATALOG_LITE_EXPIRATION_DATE}" in
+ ????-??-??) ;;
+ *)
+ echo "expiration_date must use yyyy-MM-dd format"
+ exit 1
+ ;;
+ esac
+
+ - name: Restore
+ run: dotnet restore "${{ env.PROJECT_PATH }}" -r "${{ matrix.runtime }}" --configfile NuGet.Config
+
+ - name: Publish Catalog Lite
+ env:
+ PUBLISH_DIR: artifacts/publish/${{ matrix.runtime }}
+ run: |
+ set -eu
+ dotnet publish "${{ env.PROJECT_PATH }}" \
+ -c Release \
+ -r "${{ matrix.runtime }}" \
+ --self-contained false \
+ --no-restore \
+ -p:CatalogLiteExpirationDate="${CATALOG_LITE_EXPIRATION_DATE}" \
+ -p:PublishSingleFile=true \
+ -p:SelfContained=false \
+ -p:IncludeNativeLibrariesForSelfExtract=true \
+ -p:PublishTrimmed=false \
+ -p:PublishReadyToRun=false \
+ -p:DebugType=embedded \
+ -o "${PUBLISH_DIR}"
+
+ - name: Validate published files
+ env:
+ PUBLISH_DIR: artifacts/publish/${{ matrix.runtime }}
+ run: |
+ set -eu
+ executable="${PUBLISH_DIR}/${{ matrix.executable_name }}"
+ if [ ! -f "${executable}" ]; then
+ echo "Catalog Lite executable was not produced: ${executable}"
+ exit 1
+ fi
+
+ loose_library_count="$(find "${PUBLISH_DIR}" -maxdepth 1 -type f \( -iname '*.dll' -o -name '*.so' -o -name '*.dylib' \) | wc -l | tr -d ' ')"
+ if [ "${loose_library_count}" -ne 0 ]; then
+ echo "Catalog Lite publish must not contain loose native or managed libraries:"
+ find "${PUBLISH_DIR}" -maxdepth 1 -type f \( -iname '*.dll' -o -name '*.so' -o -name '*.dylib' \) -print
+ exit 1
+ fi
+
+ extra_file_count="$(find "${PUBLISH_DIR}" -maxdepth 1 -type f ! -name "${{ matrix.executable_name }}" | wc -l | tr -d ' ')"
+ if [ "${extra_file_count}" -ne 0 ]; then
+ echo "Catalog Lite publish artifact must contain only ${{ matrix.executable_name }}:"
+ find "${PUBLISH_DIR}" -maxdepth 1 -type f ! -name "${{ matrix.executable_name }}" -print
+ exit 1
+ fi
+
+ - name: Upload publish artifact
+ uses: actions/upload-artifact@v3
+ with:
+ name: ${{ matrix.artifact_name }}
+ path: artifacts/publish/${{ matrix.runtime }}/${{ matrix.executable_name }}
+ if-no-files-found: error
+
+ release:
+ needs: build
+ runs-on: docker
+ env:
+ FORGEJO_TOKEN: ${{ secrets.FORGEJO_TOKEN }}
+
+ steps:
+ - name: Download Windows artifact
+ uses: actions/download-artifact@v3
+ with:
+ name: catalog-lite-win-x64
+ path: artifacts/release/win-x64
+
+ - name: Validate release token
+ run: |
+ set -eu
+ if [ -z "${FORGEJO_TOKEN}" ]; then
+ echo "secrets.FORGEJO_TOKEN is required for Catalog Lite releases"
+ exit 1
+ fi
+
+ - name: Create or update release
+ run: |
+ set -eu
+ api_base="${FORGEJO_SERVER_URL%/}/api/v1/repos/${FORGEJO_REPOSITORY}"
+ tag="catalog-lite-${CATALOG_LITE_EXPIRATION_DATE}"
+ name="Catalog Lite ${CATALOG_LITE_EXPIRATION_DATE}"
+ commit="${FORGEJO_SHA:-${GITHUB_SHA:-}}"
+ create_payload="$(printf '{"tag_name":"%s","target_commitish":"%s","name":"%s","body":"Catalog Lite\\n\\nScadenza build: %s","draft":false,"prerelease":false}' "${tag}" "${commit}" "${name}" "${CATALOG_LITE_EXPIRATION_DATE}")"
+ update_payload="$(printf '{"body":"Catalog Lite\\n\\nScadenza build: %s"}' "${CATALOG_LITE_EXPIRATION_DATE}")"
+
+ http_code="$(curl -sS -o release.json -w '%{http_code}' \
+ -H "Authorization: token ${FORGEJO_TOKEN}" \
+ "${api_base}/releases/tags/${tag}")"
+
+ if [ "${http_code}" = "200" ]; then
+ release_id="$(sed -n 's/.*"id":\([0-9][0-9]*\).*/\1/p' release.json | head -n1)"
+ curl -fsS \
+ -H "Authorization: token ${FORGEJO_TOKEN}" \
+ -H "Content-Type: application/json" \
+ -X PATCH \
+ -d "${update_payload}" \
+ "${api_base}/releases/${release_id}" \
+ -o release.json
+ elif [ "${http_code}" = "404" ]; then
+ curl -fsS \
+ -H "Authorization: token ${FORGEJO_TOKEN}" \
+ -H "Content-Type: application/json" \
+ -X POST \
+ -d "${create_payload}" \
+ "${api_base}/releases" \
+ -o release.json
+ release_id="$(sed -n 's/.*"id":\([0-9][0-9]*\).*/\1/p' release.json | head -n1)"
+ else
+ echo "Unexpected response while loading release for tag ${tag}: ${http_code}"
+ cat release.json
+ exit 1
+ fi
+
+ if [ -z "${release_id}" ]; then
+ echo "Unable to resolve Forgejo release id"
+ cat release.json
+ exit 1
+ fi
+
+ echo "RELEASE_ID=${release_id}" >> "${GITHUB_ENV}"
+
+ - name: Upload release assets
+ run: |
+ set -eu
+ api_base="${FORGEJO_SERVER_URL%/}/api/v1/repos/${FORGEJO_REPOSITORY}"
+
+ windows_exe="$(find artifacts/release/win-x64 -maxdepth 1 -type f -iname '*.exe' | head -n1)"
+
+ if [ -z "${windows_exe}" ]; then
+ echo "No Windows executable found in downloaded artifact"
+ exit 1
+ fi
+
+ curl -fsS \
+ -H "Authorization: token ${FORGEJO_TOKEN}" \
+ "${api_base}/releases/${RELEASE_ID}/assets" \
+ -o assets.json
+
+ for asset_id in $(tr '{' '\n' < assets.json | sed -n 's/.*"id":\([0-9][0-9]*\).*"name":"[^"]*".*/\1/p'); do
+ curl -fsS \
+ -H "Authorization: token ${FORGEJO_TOKEN}" \
+ -X DELETE \
+ "${api_base}/releases/${RELEASE_ID}/assets/${asset_id}"
+ done
+
+ upload_asset() {
+ asset_path="$1"
+ asset_name="$2"
+ curl -fsS \
+ -H "Authorization: token ${FORGEJO_TOKEN}" \
+ -H "Content-Type: application/octet-stream" \
+ --data-binary @"${asset_path}" \
+ "${api_base}/releases/${RELEASE_ID}/assets?name=${asset_name}"
+ }
+
+ upload_asset "${windows_exe}" "CatalogLite-${CATALOG_LITE_EXPIRATION_DATE}.exe"
diff --git a/.forgejo/workflows/build-windows-avalonia.yml b/.forgejo/workflows/build-windows-avalonia.yml
new file mode 100644
index 0000000..c418d92
--- /dev/null
+++ b/.forgejo/workflows/build-windows-avalonia.yml
@@ -0,0 +1,107 @@
+name: Build Windows Avalonia
+
+on:
+ push:
+ branches:
+ - master
+ - develop
+ paths:
+ - '.forgejo/workflows/build-windows-avalonia.yml'
+ - 'Catalog.Communication/**'
+ - 'GitVersion.yml'
+ - 'NuGet.Config'
+ - 'MaddoShared/**'
+ - 'imagecatalog/**'
+ workflow_dispatch:
+
+env:
+ DOTNET_VERSION: 10.0.x
+ PROJECT_PATH: imagecatalog/ImageCatalog 2.csproj
+ PUBLISH_DIR: artifacts/publish/win-x64
+ ARTIFACT_NAME: imagecatalog-windows-avalonia
+ NUGET_SOURCE_NAME: Nuget-Forgejo-AIFotoONLUS
+ NUGET_SOURCE_URL: ${{ vars.AIFOTOONLUS_NUGET_SOURCE_URL || format('{0}/api/packages/{1}/nuget/index.json', github.server_url, vars.AIFOTOONLUS_PACKAGE_OWNER || github.repository_owner) }}
+
+jobs:
+ build:
+ runs-on: docker
+ env:
+ FORGEJO_PACKAGE_USERNAME: ${{ secrets.FORGEJO_PACKAGE_USERNAME }}
+ FORGEJO_PACKAGE_TOKEN: ${{ secrets.FORGEJO_PACKAGE_TOKEN }}
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - name: Setup .NET
+ uses: actions/setup-dotnet@v4
+ with:
+ dotnet-version: ${{ env.DOTNET_VERSION }}
+
+ - name: Validate NuGet secrets
+ run: |
+ set -eu
+ if [ -z "${FORGEJO_PACKAGE_USERNAME}" ]; then
+ echo "secrets.FORGEJO_PACKAGE_USERNAME is required"
+ exit 1
+ fi
+ if [ -z "${FORGEJO_PACKAGE_TOKEN}" ]; then
+ echo "secrets.FORGEJO_PACKAGE_TOKEN is required"
+ exit 1
+ fi
+
+ - name: Configure private NuGet source
+ run: |
+ set -eu
+ temp_config="${RUNNER_TEMP}/nuget.config"
+ cp NuGet.Config "${temp_config}"
+
+ dotnet nuget update source "${{ env.NUGET_SOURCE_NAME }}" \
+ --source "${{ env.NUGET_SOURCE_URL }}" \
+ --username "${FORGEJO_PACKAGE_USERNAME}" \
+ --password "${FORGEJO_PACKAGE_TOKEN}" \
+ --store-password-in-clear-text \
+ --configfile "${temp_config}"
+
+ echo "NUGET_CONFIG_PATH=${temp_config}" >> "${GITHUB_ENV}"
+
+ - name: Restore
+ run: dotnet restore "${{ env.PROJECT_PATH }}" -r win-x64 --configfile "${NUGET_CONFIG_PATH}"
+
+ - name: Publish Windows Avalonia build
+ run: |
+ set -eu
+ dotnet publish "${{ env.PROJECT_PATH }}" \
+ -c Release \
+ -r win-x64 \
+ --self-contained true \
+ --no-restore \
+ -p:AvaloniaWindowsCrossPublish=true \
+ -p:PublishSingleFile=true \
+ -p:PublishTrimmed=false \
+ -p:PublishReadyToRun=false \
+ -o "${{ env.PUBLISH_DIR }}"
+
+ - name: Validate published executable
+ run: |
+ set -eu
+ exe_count="$(find "${{ env.PUBLISH_DIR }}" -maxdepth 1 -type f -iname '*.exe' | wc -l | tr -d ' ')"
+ if [ "${exe_count}" -eq 0 ]; then
+ echo "No Windows executable produced in ${{ env.PUBLISH_DIR }}"
+ exit 1
+ fi
+
+ legacy_renderer_count="$(find "${{ env.PUBLISH_DIR }}" -maxdepth 1 -type f \( -iname 'Microsoft.Windows.Compatibility.dll' -o -iname 'System.Private.Windows.GdiPlus.dll' \) | wc -l | tr -d ' ')"
+ if [ "${legacy_renderer_count}" -ne 0 ]; then
+ echo "Legacy GDI compatibility assemblies must not be published:"
+ find "${{ env.PUBLISH_DIR }}" -maxdepth 1 -type f \( -iname 'Microsoft.Windows.Compatibility.dll' -o -iname 'System.Private.Windows.GdiPlus.dll' \) -print
+ exit 1
+ fi
+
+ - name: Upload publish artifact
+ uses: actions/upload-artifact@v3
+ with:
+ name: ${{ env.ARTIFACT_NAME }}
+ path: ${{ env.PUBLISH_DIR }}
+ if-no-files-found: error
+
diff --git a/.forgejo/workflows/release-windows-avalonia.yml b/.forgejo/workflows/release-windows-avalonia.yml
new file mode 100644
index 0000000..ca7c521
--- /dev/null
+++ b/.forgejo/workflows/release-windows-avalonia.yml
@@ -0,0 +1,174 @@
+name: Release Windows Avalonia
+
+on:
+ push:
+ tags:
+ - '*'
+
+env:
+ DOTNET_VERSION: 10.0.x
+ PROJECT_PATH: imagecatalog/ImageCatalog 2.csproj
+ PUBLISH_DIR: artifacts/publish/win-x64
+ ARTIFACT_NAME: imagecatalog-windows-avalonia
+ NUGET_SOURCE_NAME: Nuget-Forgejo-AIFotoONLUS
+ NUGET_SOURCE_URL: ${{ vars.AIFOTOONLUS_NUGET_SOURCE_URL || format('{0}/api/packages/{1}/nuget/index.json', forgejo.server_url, vars.AIFOTOONLUS_PACKAGE_OWNER || forgejo.repository_owner) }}
+
+jobs:
+ build:
+ runs-on: docker
+ env:
+ FORGEJO_PACKAGE_USERNAME: ${{ secrets.FORGEJO_PACKAGE_USERNAME }}
+ FORGEJO_PACKAGE_TOKEN: ${{ secrets.FORGEJO_PACKAGE_TOKEN }}
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - name: Setup .NET
+ uses: actions/setup-dotnet@v4
+ with:
+ dotnet-version: ${{ env.DOTNET_VERSION }}
+
+ - name: Validate NuGet secrets
+ run: |
+ set -eu
+ if [ -z "${FORGEJO_PACKAGE_USERNAME}" ]; then
+ echo "secrets.FORGEJO_PACKAGE_USERNAME is required"
+ exit 1
+ fi
+ if [ -z "${FORGEJO_PACKAGE_TOKEN}" ]; then
+ echo "secrets.FORGEJO_PACKAGE_TOKEN is required"
+ exit 1
+ fi
+
+ - name: Configure private NuGet source
+ run: |
+ set -eu
+ temp_config="${RUNNER_TEMP}/nuget.config"
+ cp NuGet.Config "${temp_config}"
+
+ dotnet nuget update source "${{ env.NUGET_SOURCE_NAME }}" \
+ --source "${{ env.NUGET_SOURCE_URL }}" \
+ --username "${FORGEJO_PACKAGE_USERNAME}" \
+ --password "${FORGEJO_PACKAGE_TOKEN}" \
+ --store-password-in-clear-text \
+ --configfile "${temp_config}"
+
+ echo "NUGET_CONFIG_PATH=${temp_config}" >> "${GITHUB_ENV}"
+
+ - name: Restore
+ run: dotnet restore "${{ env.PROJECT_PATH }}" -r win-x64 --configfile "${NUGET_CONFIG_PATH}"
+
+ - name: Publish Windows Avalonia build
+ run: |
+ set -eu
+ dotnet publish "${{ env.PROJECT_PATH }}" \
+ -c Release \
+ -r win-x64 \
+ --self-contained true \
+ --no-restore \
+ -p:AvaloniaWindowsCrossPublish=true \
+ -p:PublishSingleFile=true \
+ -p:PublishTrimmed=false \
+ -p:PublishReadyToRun=false \
+ -o "${{ env.PUBLISH_DIR }}"
+
+ - name: Validate published executable
+ run: |
+ set -eu
+ exe_count="$(find "${{ env.PUBLISH_DIR }}" -maxdepth 1 -type f -iname '*.exe' | wc -l | tr -d ' ')"
+ if [ "${exe_count}" -eq 0 ]; then
+ echo "No Windows executable produced in ${{ env.PUBLISH_DIR }}"
+ exit 1
+ fi
+
+ legacy_renderer_count="$(find "${{ env.PUBLISH_DIR }}" -maxdepth 1 -type f \( -iname 'Microsoft.Windows.Compatibility.dll' -o -iname 'System.Private.Windows.GdiPlus.dll' \) | wc -l | tr -d ' ')"
+ if [ "${legacy_renderer_count}" -ne 0 ]; then
+ echo "Legacy GDI compatibility assemblies must not be published:"
+ find "${{ env.PUBLISH_DIR }}" -maxdepth 1 -type f \( -iname 'Microsoft.Windows.Compatibility.dll' -o -iname 'System.Private.Windows.GdiPlus.dll' \) -print
+ exit 1
+ fi
+
+ - name: Upload publish artifact
+ uses: actions/upload-artifact@v3
+ with:
+ name: ${{ env.ARTIFACT_NAME }}
+ path: ${{ env.PUBLISH_DIR }}
+ if-no-files-found: error
+
+ release:
+ needs: build
+ runs-on: docker
+ env:
+ FORGEJO_TOKEN: ${{ secrets.FORGEJO_TOKEN }}
+
+ steps:
+ - name: Download publish artifact
+ uses: actions/download-artifact@v3
+ with:
+ name: ${{ env.ARTIFACT_NAME }}
+ path: artifacts/release
+
+ - name: Validate release token
+ run: |
+ set -eu
+ if [ -z "${FORGEJO_TOKEN}" ]; then
+ echo "secrets.FORGEJO_TOKEN is required for tagged releases"
+ exit 1
+ fi
+
+ - name: Create or reuse release
+ run: |
+ set -eu
+ api_base="${FORGEJO_SERVER_URL%/}/api/v1/repos/${FORGEJO_REPOSITORY}"
+ tag="${FORGEJO_REF_NAME}"
+
+ http_code="$(curl -sS -o release.json -w '%{http_code}' \
+ -H "Authorization: token ${FORGEJO_TOKEN}" \
+ "${api_base}/releases/tags/${tag}")"
+
+ if [ "${http_code}" = "200" ]; then
+ release_id="$(sed -n 's/.*"id":\([0-9][0-9]*\).*/\1/p' release.json | head -n1)"
+ elif [ "${http_code}" = "404" ]; then
+ payload="$(printf '{"tag_name":"%s","name":"%s","draft":false,"prerelease":false}' "${tag}" "${tag}")"
+ curl -fsS \
+ -H "Authorization: token ${FORGEJO_TOKEN}" \
+ -H "Content-Type: application/json" \
+ -X POST \
+ -d "${payload}" \
+ "${api_base}/releases" \
+ -o release.json
+ release_id="$(sed -n 's/.*"id":\([0-9][0-9]*\).*/\1/p' release.json | head -n1)"
+ else
+ echo "Unexpected response while loading release for tag ${tag}: ${http_code}"
+ cat release.json
+ exit 1
+ fi
+
+ if [ -z "${release_id}" ]; then
+ echo "Unable to resolve Forgejo release id"
+ cat release.json
+ exit 1
+ fi
+
+ echo "RELEASE_ID=${release_id}" >> "${GITHUB_ENV}"
+
+ - name: Upload executable to release
+ run: |
+ set -eu
+ api_base="${FORGEJO_SERVER_URL%/}/api/v1/repos/${FORGEJO_REPOSITORY}"
+ executable_path="$(find artifacts/release -maxdepth 1 -type f -iname '*.exe' | head -n1)"
+
+ if [ -z "${executable_path}" ]; then
+ echo "No executable found in downloaded artifact"
+ exit 1
+ fi
+
+ short_sha="$(printf '%s' "${FORGEJO_SHA}" | cut -c1-12)"
+ asset_name="ImageCatalog-avalonia-win-x64-${FORGEJO_REF_NAME}-${short_sha}.exe"
+
+ curl -fsS \
+ -H "Authorization: token ${FORGEJO_TOKEN}" \
+ -H "Content-Type: application/octet-stream" \
+ --data-binary @"${executable_path}" \
+ "${api_base}/releases/${RELEASE_ID}/assets?name=${asset_name}"
\ No newline at end of file
diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md
new file mode 100644
index 0000000..8431a6c
--- /dev/null
+++ b/.github/copilot-instructions.md
@@ -0,0 +1,81 @@
+# Copilot Instructions
+
+## Build & Test Commands
+
+```powershell
+# Build
+dotnet build Catalog.slnx
+
+# Run all tests
+dotnet test MaddoShared.Tests
+
+# Run a single test
+dotnet test MaddoShared.Tests --filter "FullyQualifiedName~MethodName"
+
+# Benchmarks (modes: quick | all | parallel | chunks | sizes | stress)
+.\run-benchmarks.ps1 quick
+
+# Publish release build (self-contained Windows EXE)
+dotnet publish "imagecatalog\ImageCatalog 2.csproj" -c Release -r win-x64 --self-contained
+```
+
+## Architecture
+
+This is an Avalonia image cataloging application targeting .NET 10.0-windows.
+
+### Projects
+
+| Project | Purpose |
+|---------|---------|
+| **imagecatalog** | Main desktop application — Avalonia with Fluent theme (`AvaloniaMainWindow`) |
+| **MaddoShared** | Shared image processing library (the core) |
+| **MaddoShared.Tests** | Unit tests for MaddoShared |
+| **MaddoShared.Benchmarks** | BenchmarkDotNet performance benchmarks |
+| **WPFCatalog** | Alternate WPF UI (secondary) |
+| **ImageCatalogCS / ImageCatalogParallel** | Legacy/experimental variants |
+| **CatalogLib / CatalogLibVb / CatalogVbLib** | Legacy VB.NET libraries |
+
+The main app launches Avalonia directly. Dialog events (`SelectSourceFolderRequested`, etc.) are subscribed in `AvaloniaMainWindow` code-behind. `DataModel.UiInvoker` must be set by the active UI to enable cross-thread UI updates (Avalonia sets this to `Dispatcher.UIThread.Invoke`).
+
+### Core Flow
+
+1. User configures paths/settings in the UI (`DataModel.cs` — MVVM ViewModel)
+2. `ProcessImagesCommand` triggers `ImageCreationService`
+3. `ImageCreationService` processes files in parallel chunks, with configurable concurrency and batch size (GC flush between chunks)
+4. Each file is handled by the ImageSharp `IImageCreator` implementation
+5. Output: resized/watermarked/overlaid images written to a destination folder hierarchy
+
+### Key Abstractions (MaddoShared)
+
+- **`IImageCreator`** — single async method to process one image; implemented by `ImageCreatorImageSharp` (SixLabors.ImageSharp)
+- **`ImageCreationService`** — parallel orchestrator; uses `AsyncEnumerator` with chunking; loads logo once, clones per thread for thread safety
+- **`ImageState`** — per-file processing context (input path, EXIF orientation, thumbnail sizes, overlays, logo, rotation)
+- **`PicSettings`** — 50+ property configuration model (dimensions, fonts, colors, JPEG quality, watermark, logo positioning)
+- **`FileHelperSharp`** — recursive file enumeration with folder-per-N-files mapping and counter formatting
+
+## Conventions
+
+### C# Style
+- File-scoped namespaces everywhere: `namespace MaddoShared;`
+- Nullable reference types enabled (`enable`)
+- Implicit usings enabled
+- `ConfigureAwait(false)` on all `await` calls in library code
+
+### Dependency Injection
+- Constructor injection throughout; loggers typed as `ILogger`
+- Main app wires services in `Program.cs` via `IServiceCollection`
+
+### Testing
+- MSTest with `[TestClass]` / `[TestMethod]`
+- FluentAssertions for assertions
+- Moq for mocking
+- Factory helper pattern in tests: `CreateService(Action configure = null)` methods for flexible test setup
+
+### Async / Parallelism
+- All image I/O is `async Task`
+- `ImageCreationService` uses configurable `MaxDegreeOfParallelism` and `ChunkSize`; explicit `GC.Collect()` between chunks to manage memory under batch load
+
+### Versioning & CI
+- Semantic versioning via **GitVersion** (mode: `ContinuousDelivery`, current base: `3.2.0`)
+- GitLab CI pipeline: builds → single-file self-contained EXE → GitLab Release
+- Private NuGet packages scoped to `AIFotoONLUS.*` prefix, routed to the GitLab package registry (see `NuGet.Config`)
diff --git a/.gitignore b/.gitignore
index 432b9b3..7c86da2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -255,3 +255,6 @@ paket-files/
# JetBrains Rider
.idea/
*.sln.iml
+.vscode/settings.json
+tmp/**
+TestArtifacts/**
\ No newline at end of file
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000..04a76b7
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,159 @@
+stages:
+ - build
+ - publish
+
+# Only create pipelines automatically when a Git tag is pushed.
+# Otherwise the pipeline must be started manually (pipeline "Run" / dispatch equivalent).
+# workflow:
+# rules:
+# - if: '$CI_COMMIT_TAG'
+# when: always
+# - if: '$CI_PIPELINE_SOURCE == "web"'
+# when: always
+# - when: never
+
+variables:
+ DOTNET_CLI_TELEMETRY_OPTOUT: "1"
+ DOTNET_SKIP_FIRST_TIME_EXPERIENCE: "1"
+ BUILD_CONFIG: "Release"
+ # NOTE: This project uses repository variables for NuGet auth because secrets
+ # (masked/protected variables) may not be available on your GitLab plan.
+ # Replace the placeholders below with values in the repository, or override
+ # them in your project CI/CD variables when available.
+ # - NUGET_USERNAME : username (can be any value when using a PAT)
+ # - NUGET_PASSWORD : personal access token or project deploy token
+ NUGET_USERNAME: "REPLACE_WITH_USERNAME"
+ NUGET_PASSWORD: "REPLACE_WITH_TOKEN"
+
+# Build job for Windows runner (shell executor). Remove 'image' so the runner uses the host environment.
+build_windows:
+ stage: build
+ tags:
+ - saas-windows-medium-amd64
+ script:
+ - |
+ powershell -NoProfile -Command {
+ $needsInstall = -not (dotnet --list-sdks 2>$null | Select-String '^10\.')
+ if ($needsInstall) {
+ Write-Host 'Installing .NET 10 SDK using dotnet-install.ps1'
+ Invoke-WebRequest 'https://dot.net/v1/dotnet-install.ps1' -OutFile dotnet-install.ps1 -UseBasicParsing
+ .\dotnet-install.ps1 -Channel 10.0 -InstallDir $env:USERPROFILE\.dotnet
+ $dotnetExe = Join-Path $env:USERPROFILE '.dotnet\dotnet.exe'
+ } else {
+ Write-Host '.NET 10 SDK already present on PATH'
+ $dotnetExe = 'dotnet'
+ }
+
+ # Configure private NuGet source from GitLab Packages using CI_JOB_TOKEN
+ # Fallback to repository variables NUGET_USERNAME/NUGET_PASSWORD for shared runners
+ $nugetUrl = 'https://gitlab.com/api/v4/projects/79509532/packages/nuget/index.json'
+ $authMode = $null
+ if ($env:CI_JOB_TOKEN) {
+ Write-Host 'Configuring private NuGet source Nuget-GitLab-AIFotoONLUS using CI_JOB_TOKEN...'
+ try { & $dotnetExe nuget remove source Nuget-GitLab-AIFotoONLUS } catch {}
+ & $dotnetExe nuget add source $nugetUrl --name Nuget-GitLab-AIFotoONLUS --username gitlab-ci-token --password $env:CI_JOB_TOKEN --store-password-in-clear-text
+ $authMode = 'JobToken'
+ } elseif ($env:NUGET_USERNAME -and $env:NUGET_PASSWORD) {
+ Write-Host 'Configuring private NuGet source Nuget-GitLab-AIFotoONLUS using NUGET_USERNAME/NUGET_PASSWORD...'
+ try { & $dotnetExe nuget remove source Nuget-GitLab-AIFotoONLUS } catch {}
+ & $dotnetExe nuget add source $nugetUrl --name Nuget-GitLab-AIFotoONLUS --username $env:NUGET_USERNAME --password $env:NUGET_PASSWORD --store-password-in-clear-text
+ $authMode = 'UserCreds'
+ } else {
+ Write-Host 'No credentials available; skipping private NuGet source configuration.'
+ }
+
+ & $dotnetExe --info
+ # Diagnostic: verify GitLab NuGet feed and package visibility using configured auth
+ if ($authMode) {
+ Write-Host 'Checking GitLab NuGet feed index and project packages for AIFotoONLUS.Core using auth mode:' $authMode
+ try {
+ if ($authMode -eq 'JobToken') {
+ $headers = @{ 'JOB-TOKEN' = $env:CI_JOB_TOKEN }
+ } else {
+ $pair = "$env:NUGET_USERNAME:$env:NUGET_PASSWORD"
+ $b64 = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes($pair))
+ $headers = @{ Authorization = "Basic $b64" }
+ }
+ Invoke-RestMethod -Uri $nugetUrl -Headers $headers -Method Get | ConvertTo-Json | Write-Host
+ } catch { Write-Host "Failed to fetch feed index: $_" }
+ try {
+ $pkgApi = "https://gitlab.com/api/v4/projects/79509532/packages?package_name=AIFotoONLUS.Core"
+ Invoke-RestMethod -Uri $pkgApi -Headers $headers -Method Get | ConvertTo-Json | Write-Host
+ } catch { Write-Host "Failed to query project packages API: $_" }
+ } else {
+ Write-Host 'Skipping feed diagnostics because no auth configured.'
+ }
+ & $dotnetExe restore
+ & $dotnetExe build "imagecatalog\ImageCatalog 2.csproj" -c $env:BUILD_CONFIG -v minimal
+ # Produce a single-file, ready-to-run publish so downstream jobs only need the EXE.
+ try {
+ & $dotnetExe publish "imagecatalog\ImageCatalog 2.csproj" -c $env:BUILD_CONFIG -r win-x64 --self-contained true -p:PublishSingleFile=true -p:PublishTrimmed=false -p:PublishReadyToRun=true -o "imagecatalog\bin\$env:BUILD_CONFIG\net10.0-windows\publish" -v minimal
+ $publishDir = "imagecatalog\bin\$env:BUILD_CONFIG\net10.0-windows\publish"
+ $legacyRendererFiles = Get-ChildItem $publishDir -File | Where-Object { $_.Name -in @('Microsoft.Windows.Compatibility.dll', 'System.Private.Windows.GdiPlus.dll') }
+ if ($legacyRendererFiles) {
+ Write-Host 'Legacy GDI compatibility assemblies must not be published:'
+ $legacyRendererFiles | ForEach-Object { Write-Host $_.FullName }
+ exit 1
+ }
+ } catch {
+ Write-Host "dotnet publish failed: $_"
+ throw
+ }
+ }
+ artifacts:
+ paths:
+ - "imagecatalog/bin/$BUILD_CONFIG/net10.0-windows/publish/**"
+ expire_in: 1 hour
+
+# Publish and create GitLab Release when building a tag.
+publish_release:
+ stage: publish
+ image: mcr.microsoft.com/dotnet/sdk:10.0
+ variables:
+ GIT_DEPTH: 0
+ needs:
+ - job: build_windows
+ artifacts: true
+ script: |
+ set -euo pipefail
+ dotnet --info
+ export PATH="$PATH:$HOME/.dotnet/tools"
+ echo "Installing minver-cli"
+ dotnet tool install --global minver-cli --version 7.0.0
+ # Ensure we have full git history and tags for MinVer to compute an accurate version
+ git fetch --prune --unshallow || true
+ git fetch --tags || true
+ echo "Computing version with minver-cli"
+ version=$(minver 2>/dev/null | tail -n1 || true)
+ if [ -z "$version" ]; then echo "minver failed to produce a version"; exit 1; fi
+ echo "Using version: $version"
+ export VERSION="$version"
+ # find the single-file exe from the publish output
+ file=$(find imagecatalog/bin -type f -iname '*.exe' -print | head -n1 || true)
+ if [ -z "$file" ]; then file=$(find imagecatalog -type f -iname '*.exe' -print | head -n1 || true); fi
+ if [ -z "$file" ]; then echo "No artifact EXE found to attach"; exit 1; fi
+ echo "Uploading artifact: $file"
+ uploadResp=$(curl --silent --show-error --header "JOB-TOKEN:$CI_JOB_TOKEN" --form "file=@$file" "$CI_API_V4_URL/projects/$CI_PROJECT_ID/uploads")
+ assetPath=$(echo "$uploadResp" | sed -n 's/.*"url":"\([^\"]*\)".*/\1/p')
+ if [ -z "$assetPath" ]; then echo "Upload failed: $uploadResp"; exit 1; fi
+ assetUrl="$CI_SERVER_URL$assetPath"
+ echo "Uploaded asset url: $assetUrl"
+ basename=$(basename "$file")
+ export RELEASE_ASSET_URL="$assetUrl"
+ export ASSET_BASENAME="$basename"
+ artifacts:
+ expire_in: 1 day
+ release:
+ tag_name: "$VERSION"
+ name: "Release $VERSION"
+ description: "Automated release from CI (version $VERSION)"
+ assets:
+ links:
+ - name: "$ASSET_BASENAME"
+ url: "$RELEASE_ASSET_URL"
+# only:
+# - tags
+
+# Notes for runner setup: The job now runs on the public .NET SDK image and downloads artifacts from the
+# `build_windows` job via `needs`. It reads the `minversion` file produced by the build artifacts and
+# uses that value as the release tag.
diff --git a/.gitmodules b/.gitmodules
deleted file mode 100644
index 99a1b50..0000000
--- a/.gitmodules
+++ /dev/null
@@ -1,3 +0,0 @@
-[submodule "MaddoLibrary"]
- path = MaddoLibrary
- url = git@gitlab.com:MaddoTools/MaddoLibrary.git
diff --git a/.gitversion.yml b/.gitversion.yml
new file mode 100644
index 0000000..a0d761b
--- /dev/null
+++ b/.gitversion.yml
@@ -0,0 +1,23 @@
+mode: ContinuousDelivery
+branches:
+ main:
+ tag: ''
+ increment: Patch
+ prevent-increment-of-merged-branch-version: true
+ track-merge-target: false
+ develop:
+ tag: alpha
+ increment: Minor
+ prevent-increment-of-merged-branch-version: false
+ feature:
+ tag: beta
+ increment: Patch
+ hotfix:
+ tag: hotfix
+ increment: Patch
+ release:
+ tag: rc
+ increment: Patch
+ignore:
+ sha: []
+commit-message-incrementing: Disabled
diff --git a/.vscode/launch.json b/.vscode/launch.json
new file mode 100644
index 0000000..afbb38c
--- /dev/null
+++ b/.vscode/launch.json
@@ -0,0 +1,27 @@
+{
+ "version": "0.2.0",
+ "configurations": [
+ {
+ "name": "ImageCatalog Avalonia",
+ "type": "coreclr",
+ "request": "launch",
+ "preLaunchTask": "build ImageCatalog Avalonia",
+ "program": "${workspaceFolder:Catalog}/imagecatalog/bin/Debug/net10.0-windows/win-x64/ImageCatalog.exe",
+ "args": [],
+ "cwd": "${workspaceFolder:Catalog}/imagecatalog",
+ "stopAtEntry": false,
+ "console": "internalConsole"
+ },
+ {
+ "name": "CatalogLite Avalonia",
+ "type": "coreclr",
+ "request": "launch",
+ "preLaunchTask": "build CatalogLite Avalonia",
+ "program": "${workspaceFolder:Catalog}/CatalogLite/bin/Debug/net10.0/CatalogLite.exe",
+ "args": [],
+ "cwd": "${workspaceFolder:Catalog}/CatalogLite",
+ "stopAtEntry": false,
+ "console": "internalConsole"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/.vscode/tasks.json b/.vscode/tasks.json
new file mode 100644
index 0000000..791bec6
--- /dev/null
+++ b/.vscode/tasks.json
@@ -0,0 +1,31 @@
+{
+ "version": "2.0.0",
+ "tasks": [
+ {
+ "label": "build ImageCatalog Avalonia",
+ "type": "process",
+ "command": "dotnet",
+ "args": [
+ "build",
+ "${workspaceFolder:Catalog}/imagecatalog/ImageCatalog 2.csproj",
+ "--configuration",
+ "Debug"
+ ],
+ "problemMatcher": "$msCompile",
+ "group": "build"
+ },
+ {
+ "label": "build CatalogLite Avalonia",
+ "type": "process",
+ "command": "dotnet",
+ "args": [
+ "build",
+ "${workspaceFolder:Catalog}/CatalogLite/CatalogLite.csproj",
+ "--configuration",
+ "Debug"
+ ],
+ "problemMatcher": "$msCompile",
+ "group": "build"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Catalog.Communication/Abstractions/IRaceUploadCommunicationClient.cs b/Catalog.Communication/Abstractions/IRaceUploadCommunicationClient.cs
new file mode 100644
index 0000000..26d1b76
--- /dev/null
+++ b/Catalog.Communication/Abstractions/IRaceUploadCommunicationClient.cs
@@ -0,0 +1,40 @@
+using Catalog.Communication.Models;
+
+namespace Catalog.Communication.Abstractions;
+
+public interface IRaceUploadCommunicationClient
+{
+ Task LoginAdminAsync(AdminLoginRequest request, CancellationToken cancellationToken = default);
+
+ Task LogoutAdminAsync(CancellationToken cancellationToken = default);
+
+ Task UploadRaceImageAsync(RaceImageUploadRequest request, CancellationToken cancellationToken = default);
+
+ Task RemoveRaceImageAsync(RaceImageRemoveRequest request, CancellationToken cancellationToken = default);
+
+ Task UploadRaceFileAsync(RaceFileUploadRequest request, CancellationToken cancellationToken = default);
+
+ Task SaveRaceAsync(RaceSaveRequest request, CancellationToken cancellationToken = default);
+
+ Task CreateRacePointsAsync(long raceId, CancellationToken cancellationToken = default);
+
+ Task IndexRacePointAsync(long pointId, CancellationToken cancellationToken = default);
+
+ Task GetRaceDetailAsync(long raceId, CancellationToken cancellationToken = default);
+
+ Task UploadFileToReceiverAsync(ReceiveFileUploadRequest request, CancellationToken cancellationToken = default);
+
+ Task ExecuteGaraCommandAsync(IReadOnlyDictionary formFields, CancellationToken cancellationToken = default);
+
+ Task ExecuteAdminPhotoCommandAsync(AdminPhotoEndpoint endpoint, IReadOnlyDictionary formFields, CancellationToken cancellationToken = default);
+
+ Task ExecutePublicLogonAsync(IReadOnlyDictionary formFields, CancellationToken cancellationToken = default);
+
+ Task ExecuteUsersAsync(HttpMethod method, IReadOnlyDictionary? formFields = null, CancellationToken cancellationToken = default);
+
+ Task ExecuteFoto2Async(HttpMethod method, IReadOnlyDictionary? formFields = null, CancellationToken cancellationToken = default);
+
+ Task DownloadThumbnailAsync(string filename, long? idFoto = null, CancellationToken cancellationToken = default);
+
+ Task DownloadOriginalAsync(string filename, long? idFoto = null, CancellationToken cancellationToken = default);
+}
diff --git a/Catalog.Communication/Catalog.Communication.csproj b/Catalog.Communication/Catalog.Communication.csproj
new file mode 100644
index 0000000..8b3c8df
--- /dev/null
+++ b/Catalog.Communication/Catalog.Communication.csproj
@@ -0,0 +1,17 @@
+
+
+
+ net10.0
+ Library
+ enable
+ enable
+
+
+
+
+
+
+
+
+
+
diff --git a/Catalog.Communication/CatalogCommunicationOptions.cs b/Catalog.Communication/CatalogCommunicationOptions.cs
new file mode 100644
index 0000000..6044d2e
--- /dev/null
+++ b/Catalog.Communication/CatalogCommunicationOptions.cs
@@ -0,0 +1,16 @@
+namespace Catalog.Communication;
+
+public sealed class CatalogCommunicationOptions
+{
+ public required Uri BaseUri { get; set; }
+
+ public string AdminPageBasePath { get; set; } = "admin/pg";
+
+ public string ReceiveFilePath { get; set; } = "ReceiveFile.abl";
+
+ public TimeSpan RequestTimeout { get; set; } = TimeSpan.FromSeconds(30);
+
+ public int RetryCount { get; set; } = 2;
+
+ public TimeSpan RetryBaseDelay { get; set; } = TimeSpan.FromMilliseconds(250);
+}
diff --git a/Catalog.Communication/DependencyInjection/CatalogCommunicationServiceCollectionExtensions.cs b/Catalog.Communication/DependencyInjection/CatalogCommunicationServiceCollectionExtensions.cs
new file mode 100644
index 0000000..bb5a5b1
--- /dev/null
+++ b/Catalog.Communication/DependencyInjection/CatalogCommunicationServiceCollectionExtensions.cs
@@ -0,0 +1,57 @@
+using System.Net;
+using Catalog.Communication.Abstractions;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.DependencyInjection.Extensions;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Logging.Abstractions;
+using Microsoft.Extensions.Options;
+
+namespace Catalog.Communication.DependencyInjection;
+
+public static class CatalogCommunicationServiceCollectionExtensions
+{
+ public static IServiceCollection AddCatalogCommunication(this IServiceCollection services, Action configure)
+ {
+ ArgumentNullException.ThrowIfNull(services);
+ ArgumentNullException.ThrowIfNull(configure);
+
+ services
+ .AddOptions()
+ .Configure(configure)
+ .Validate(o => o.BaseUri is not null, "CatalogCommunicationOptions.BaseUri is required.")
+ .Validate(o => !string.IsNullOrWhiteSpace(o.AdminPageBasePath), "AdminPageBasePath is required.")
+ .Validate(o => !string.IsNullOrWhiteSpace(o.ReceiveFilePath), "ReceiveFilePath is required.")
+ .Validate(o => o.RequestTimeout > TimeSpan.Zero, "RequestTimeout must be greater than zero.")
+ .Validate(o => o.RetryCount >= 0 && o.RetryCount <= 10, "RetryCount must be between 0 and 10.")
+ .Validate(o => o.RetryBaseDelay > TimeSpan.Zero, "RetryBaseDelay must be greater than zero.");
+
+ services.TryAddSingleton();
+
+ // Create the HttpClient only when the communication client is requested.
+ // This avoids constructing the DefaultHttpClientFactory (and its background cleanup timer)
+ // if the race-upload feature is never used.
+ services.AddTransient(sp =>
+ {
+ var options = sp.GetRequiredService>().Value;
+ var logger = sp.GetService>() ?? NullLogger.Instance;
+ var cookieContainer = sp.GetRequiredService();
+
+ var handler = new HttpClientHandler
+ {
+ UseCookies = true,
+ CookieContainer = cookieContainer,
+ AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate | DecompressionMethods.Brotli,
+ };
+
+ var httpClient = new HttpClient(handler, disposeHandler: true)
+ {
+ BaseAddress = options.BaseUri,
+ Timeout = options.RequestTimeout,
+ };
+
+ return new RaceUploadCommunicationClient(httpClient, sp.GetRequiredService>(), logger);
+ });
+
+ return services;
+ }
+}
diff --git a/Catalog.Communication/Models/AdminLoginRequest.cs b/Catalog.Communication/Models/AdminLoginRequest.cs
new file mode 100644
index 0000000..170faf4
--- /dev/null
+++ b/Catalog.Communication/Models/AdminLoginRequest.cs
@@ -0,0 +1,10 @@
+namespace Catalog.Communication.Models;
+
+public sealed class AdminLoginRequest
+{
+ public required string Login { get; init; }
+
+ public required string Password { get; init; }
+
+ public string Command { get; init; } = "check";
+}
diff --git a/Catalog.Communication/Models/AdminPhotoEndpoint.cs b/Catalog.Communication/Models/AdminPhotoEndpoint.cs
new file mode 100644
index 0000000..b1aad98
--- /dev/null
+++ b/Catalog.Communication/Models/AdminPhotoEndpoint.cs
@@ -0,0 +1,8 @@
+namespace Catalog.Communication.Models;
+
+public enum AdminPhotoEndpoint
+{
+ Foto = 0,
+ TipoGara = 1,
+ LogFoto = 2,
+}
diff --git a/Catalog.Communication/Models/MediaFileResponse.cs b/Catalog.Communication/Models/MediaFileResponse.cs
new file mode 100644
index 0000000..2bdfecd
--- /dev/null
+++ b/Catalog.Communication/Models/MediaFileResponse.cs
@@ -0,0 +1,16 @@
+using System.Net;
+
+namespace Catalog.Communication.Models;
+
+public sealed class MediaFileResponse
+{
+ public required HttpStatusCode StatusCode { get; init; }
+
+ public required byte[] Content { get; init; }
+
+ public string? ContentType { get; init; }
+
+ public string? FileName { get; init; }
+
+ public required IReadOnlyDictionary> Headers { get; init; }
+}
diff --git a/Catalog.Communication/Models/RaceFileUploadRequest.cs b/Catalog.Communication/Models/RaceFileUploadRequest.cs
new file mode 100644
index 0000000..83cfb3b
--- /dev/null
+++ b/Catalog.Communication/Models/RaceFileUploadRequest.cs
@@ -0,0 +1,16 @@
+namespace Catalog.Communication.Models;
+
+public sealed class RaceFileUploadRequest
+{
+ public int? CodFile { get; init; }
+
+ public long? Id { get; init; }
+
+ public required string FileName { get; init; }
+
+ public required Stream FileStream { get; init; }
+
+ public string FormFieldName { get; init; } = "fileName";
+
+ public string? ContentType { get; init; }
+}
diff --git a/Catalog.Communication/Models/RaceImageRemoveRequest.cs b/Catalog.Communication/Models/RaceImageRemoveRequest.cs
new file mode 100644
index 0000000..0e9698a
--- /dev/null
+++ b/Catalog.Communication/Models/RaceImageRemoveRequest.cs
@@ -0,0 +1,10 @@
+namespace Catalog.Communication.Models;
+
+public sealed class RaceImageRemoveRequest
+{
+ public required long Id { get; init; }
+
+ public required int CodImage { get; init; }
+
+ public int? TotImgNumber { get; init; }
+}
diff --git a/Catalog.Communication/Models/RaceImageUploadRequest.cs b/Catalog.Communication/Models/RaceImageUploadRequest.cs
new file mode 100644
index 0000000..ee049f1
--- /dev/null
+++ b/Catalog.Communication/Models/RaceImageUploadRequest.cs
@@ -0,0 +1,18 @@
+namespace Catalog.Communication.Models;
+
+public sealed class RaceImageUploadRequest
+{
+ public required long Id { get; init; }
+
+ public required int CodImage { get; init; }
+
+ public int? TotImgNumber { get; init; }
+
+ public required string FileName { get; init; }
+
+ public required Stream FileStream { get; init; }
+
+ public string FormFieldName { get; init; } = "imgFile";
+
+ public string? ContentType { get; init; }
+}
diff --git a/Catalog.Communication/Models/RaceSaveRequest.cs b/Catalog.Communication/Models/RaceSaveRequest.cs
new file mode 100644
index 0000000..88293a6
--- /dev/null
+++ b/Catalog.Communication/Models/RaceSaveRequest.cs
@@ -0,0 +1,26 @@
+namespace Catalog.Communication.Models;
+
+public sealed class RaceSaveRequest
+{
+ public long IdGara { get; init; }
+
+ public required string Description { get; init; }
+
+ public required DateOnly StartDate { get; init; }
+
+ public DateOnly? EndDate { get; init; }
+
+ public required long TipoGaraId { get; init; }
+
+ public int EventoInLinea { get; init; }
+
+ public int TipoIndicizzazione { get; init; }
+
+ public int FreeEvent { get; init; }
+
+ public string? PathBase { get; init; }
+
+ public string? Localita { get; init; }
+
+ public long? CodGara { get; init; }
+}
diff --git a/Catalog.Communication/Models/RawEndpointResponse.cs b/Catalog.Communication/Models/RawEndpointResponse.cs
new file mode 100644
index 0000000..0f0f36a
--- /dev/null
+++ b/Catalog.Communication/Models/RawEndpointResponse.cs
@@ -0,0 +1,12 @@
+using System.Net;
+
+namespace Catalog.Communication.Models;
+
+public sealed class RawEndpointResponse
+{
+ public required HttpStatusCode StatusCode { get; init; }
+
+ public required string Body { get; init; }
+
+ public required IReadOnlyDictionary> Headers { get; init; }
+}
diff --git a/Catalog.Communication/Models/ReceiveFileUploadRequest.cs b/Catalog.Communication/Models/ReceiveFileUploadRequest.cs
new file mode 100644
index 0000000..07b0b85
--- /dev/null
+++ b/Catalog.Communication/Models/ReceiveFileUploadRequest.cs
@@ -0,0 +1,16 @@
+namespace Catalog.Communication.Models;
+
+public sealed class ReceiveFileUploadRequest
+{
+ public required string FileName { get; init; }
+
+ public required Stream FileStream { get; init; }
+
+ public required string DestinationPath { get; init; }
+
+ public bool OverwriteRemoteFile { get; init; }
+
+ public int? BufferSize { get; init; }
+
+ public string? ContentType { get; init; }
+}
diff --git a/Catalog.Communication/Models/UploadFileResponse.cs b/Catalog.Communication/Models/UploadFileResponse.cs
new file mode 100644
index 0000000..e68e400
--- /dev/null
+++ b/Catalog.Communication/Models/UploadFileResponse.cs
@@ -0,0 +1,18 @@
+using System.Text.Json.Serialization;
+
+namespace Catalog.Communication.Models;
+
+public sealed class UploadFileResponse
+{
+ [JsonPropertyName("result")]
+ public bool Result { get; init; }
+
+ [JsonPropertyName("message")]
+ public string Message { get; init; } = string.Empty;
+
+ [JsonPropertyName("fileName")]
+ public string FileName { get; init; } = string.Empty;
+
+ [JsonPropertyName("fileNameLink")]
+ public string FileNameLink { get; init; } = string.Empty;
+}
diff --git a/Catalog.Communication/Models/UploadImageResponse.cs b/Catalog.Communication/Models/UploadImageResponse.cs
new file mode 100644
index 0000000..5ecc353
--- /dev/null
+++ b/Catalog.Communication/Models/UploadImageResponse.cs
@@ -0,0 +1,15 @@
+using System.Text.Json.Serialization;
+
+namespace Catalog.Communication.Models;
+
+public sealed class UploadImageResponse
+{
+ [JsonPropertyName("result")]
+ public bool Result { get; init; }
+
+ [JsonPropertyName("message")]
+ public string Message { get; init; } = string.Empty;
+
+ [JsonPropertyName("imgPath")]
+ public string ImgPath { get; init; } = string.Empty;
+}
diff --git a/Catalog.Communication/RaceUploadCommunicationClient.cs b/Catalog.Communication/RaceUploadCommunicationClient.cs
new file mode 100644
index 0000000..9657dfe
--- /dev/null
+++ b/Catalog.Communication/RaceUploadCommunicationClient.cs
@@ -0,0 +1,622 @@
+using System.Net;
+using System.Net.Http.Headers;
+using System.Text;
+using System.Text.Json;
+using System.Globalization;
+using Catalog.Communication.Abstractions;
+using Catalog.Communication.Models;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Options;
+
+namespace Catalog.Communication;
+
+public sealed class RaceUploadCommunicationClient : IRaceUploadCommunicationClient, IDisposable
+{
+ private const string AdminMenuPath = "admin/menu/Menu4.abl";
+ private const string PublicLogonPath = "Logon.abl";
+ private const string UsersPath = "Users.abl";
+ private const string Foto2Path = "Foto2.abl";
+ private const string ThumbnailPath = "foto";
+ private const string OriginalPath = "fotoOriginali";
+
+ private static readonly JsonSerializerOptions JsonOptions = new(JsonSerializerDefaults.Web)
+ {
+ PropertyNameCaseInsensitive = true,
+ };
+
+ private readonly HttpClient _httpClient;
+ private readonly ILogger _logger;
+ private readonly IOptions _options;
+ private bool _disposed;
+
+ public RaceUploadCommunicationClient(
+ HttpClient httpClient,
+ IOptions options,
+ ILogger logger)
+ {
+ _httpClient = httpClient;
+ _options = options;
+ _logger = logger;
+ }
+
+ public void Dispose()
+ {
+ if (_disposed)
+ {
+ return;
+ }
+
+ _httpClient.Dispose();
+ _disposed = true;
+ GC.SuppressFinalize(this);
+ }
+
+ public Task LoginAdminAsync(AdminLoginRequest request, CancellationToken cancellationToken = default)
+ {
+ ArgumentNullException.ThrowIfNull(request);
+
+ var formFields = new Dictionary
+ {
+ ["login"] = request.Login,
+ ["pwd"] = request.Password,
+ ["cmdIU"] = request.Command,
+ };
+
+ return PostFormAsync(AdminMenuPath, formFields, "admin-login", cancellationToken);
+ }
+
+ public Task LogoutAdminAsync(CancellationToken cancellationToken = default)
+ {
+ var formFields = new Dictionary
+ {
+ ["cmdIU"] = "login",
+ };
+
+ return PostFormAsync(AdminMenuPath, formFields, "admin-logout", cancellationToken);
+ }
+
+ public Task UploadRaceImageAsync(RaceImageUploadRequest request, CancellationToken cancellationToken = default)
+ {
+ ArgumentNullException.ThrowIfNull(request);
+
+ return PostMultipartAndParseUploadAsync(
+ GetAdminPagePath("Gara"),
+ "gara-upload-image",
+ request.FileStream,
+ request.FileName,
+ request.FormFieldName,
+ request.ContentType,
+ static fields =>
+ {
+ fields["cmd"] = "loadImg";
+ },
+ new Dictionary
+ {
+ ["id"] = request.Id.ToString(System.Globalization.CultureInfo.InvariantCulture),
+ ["codImage"] = request.CodImage.ToString(System.Globalization.CultureInfo.InvariantCulture),
+ ["totImgNumber"] = request.TotImgNumber?.ToString(System.Globalization.CultureInfo.InvariantCulture),
+ },
+ cancellationToken);
+ }
+
+ public Task RemoveRaceImageAsync(RaceImageRemoveRequest request, CancellationToken cancellationToken = default)
+ {
+ ArgumentNullException.ThrowIfNull(request);
+
+ var fields = new Dictionary
+ {
+ ["cmd"] = "removeImg",
+ ["id"] = request.Id.ToString(System.Globalization.CultureInfo.InvariantCulture),
+ ["codImage"] = request.CodImage.ToString(System.Globalization.CultureInfo.InvariantCulture),
+ ["totImgNumber"] = request.TotImgNumber?.ToString(System.Globalization.CultureInfo.InvariantCulture),
+ };
+
+ return PostFormAndParseUploadAsync(GetAdminPagePath("Gara"), fields, "gara-remove-image", cancellationToken);
+ }
+
+ public Task UploadRaceFileAsync(RaceFileUploadRequest request, CancellationToken cancellationToken = default)
+ {
+ ArgumentNullException.ThrowIfNull(request);
+
+ return PostMultipartAndParseUploadAsync(
+ GetAdminPagePath("Gara"),
+ "gara-upload-file",
+ request.FileStream,
+ request.FileName,
+ request.FormFieldName,
+ request.ContentType,
+ static fields =>
+ {
+ fields["cmd"] = "saveFile";
+ },
+ new Dictionary
+ {
+ ["codFile"] = request.CodFile?.ToString(System.Globalization.CultureInfo.InvariantCulture),
+ ["id"] = request.Id?.ToString(System.Globalization.CultureInfo.InvariantCulture),
+ },
+ cancellationToken);
+ }
+
+ public Task SaveRaceAsync(RaceSaveRequest request, CancellationToken cancellationToken = default)
+ {
+ ArgumentNullException.ThrowIfNull(request);
+
+ var formFields = new Dictionary
+ {
+ ["cmd"] = "asq",
+ ["act"] = "save",
+ ["id_gara"] = request.IdGara.ToString(CultureInfo.InvariantCulture),
+ ["descrizione"] = request.Description,
+ ["dataGaraInizio"] = request.StartDate.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture),
+ ["dataGaraFine"] = (request.EndDate ?? request.StartDate).ToString("dd/MM/yyyy", CultureInfo.InvariantCulture),
+ ["id_tipoGara"] = request.TipoGaraId.ToString(CultureInfo.InvariantCulture),
+ ["flgEventoInLinea"] = request.EventoInLinea.ToString(CultureInfo.InvariantCulture),
+ ["flgTipoIndex"] = request.TipoIndicizzazione.ToString(CultureInfo.InvariantCulture),
+ ["flgFree"] = request.FreeEvent.ToString(CultureInfo.InvariantCulture),
+ ["pathBase"] = request.PathBase,
+ ["localita"] = request.Localita,
+ ["codGara"] = request.CodGara?.ToString(CultureInfo.InvariantCulture),
+ };
+
+ return PostFormAsync(GetAdminPagePath("Gara"), formFields, "gara-save", cancellationToken);
+ }
+
+ public Task CreateRacePointsAsync(long raceId, CancellationToken cancellationToken = default)
+ {
+ var formFields = new Dictionary
+ {
+ ["cmd"] = "creaPuntiFoto",
+ ["id_gara"] = raceId.ToString(CultureInfo.InvariantCulture),
+ };
+
+ return PostFormAsync(GetAdminPagePath("Gara"), formFields, "gara-create-points", cancellationToken);
+ }
+
+ public Task IndexRacePointAsync(long pointId, CancellationToken cancellationToken = default)
+ {
+ var formFields = new Dictionary
+ {
+ ["cmd"] = "indexFoto",
+ ["id_puntoFotoIdx"] = pointId.ToString(CultureInfo.InvariantCulture),
+ };
+
+ return PostFormAsync(GetAdminPagePath("Gara"), formFields, "gara-index-point", cancellationToken);
+ }
+
+ public Task GetRaceDetailAsync(long raceId, CancellationToken cancellationToken = default)
+ {
+ var formFields = new Dictionary
+ {
+ ["cmd"] = "search",
+ ["id_gara"] = raceId.ToString(CultureInfo.InvariantCulture),
+ };
+
+ return PostFormAsync(GetAdminPagePath("Gara"), formFields, "gara-detail", cancellationToken);
+ }
+
+ public async Task UploadFileToReceiverAsync(ReceiveFileUploadRequest request, CancellationToken cancellationToken = default)
+ {
+ ArgumentNullException.ThrowIfNull(request);
+ ArgumentException.ThrowIfNullOrWhiteSpace(request.FileName);
+ ArgumentException.ThrowIfNullOrWhiteSpace(request.DestinationPath);
+ ArgumentNullException.ThrowIfNull(request.FileStream);
+
+ var payload = await ReadAllBytesAsync(request.FileStream, cancellationToken).ConfigureAwait(false);
+ var query = new Dictionary
+ {
+ ["name"] = request.FileName,
+ ["path"] = request.DestinationPath,
+ ["overwriteRemoteFile"] = request.OverwriteRemoteFile ? "true" : "false",
+ ["bs"] = request.BufferSize?.ToString(CultureInfo.InvariantCulture),
+ };
+
+ var path = AppendQuery(GetReceiveFilePath(), query);
+
+ return await ExecuteWithResilienceAsync(
+ () =>
+ {
+ var byteContent = new ByteArrayContent(payload);
+ byteContent.Headers.ContentType = new MediaTypeHeaderValue(request.ContentType ?? "application/octet-stream");
+
+ return new HttpRequestMessage(HttpMethod.Post, path)
+ {
+ Content = byteContent,
+ };
+ },
+ ToRawResponseAsync,
+ "receiver-upload",
+ cancellationToken).ConfigureAwait(false);
+ }
+
+ public Task ExecuteGaraCommandAsync(IReadOnlyDictionary formFields, CancellationToken cancellationToken = default)
+ {
+ return PostFormAsync(GetAdminPagePath("Gara"), formFields, "gara-command", cancellationToken);
+ }
+
+ public Task ExecuteAdminPhotoCommandAsync(AdminPhotoEndpoint endpoint, IReadOnlyDictionary formFields, CancellationToken cancellationToken = default)
+ {
+ var path = endpoint switch
+ {
+ AdminPhotoEndpoint.Foto => GetAdminPagePath("Foto"),
+ AdminPhotoEndpoint.TipoGara => GetAdminPagePath("TipoGara"),
+ AdminPhotoEndpoint.LogFoto => GetAdminPagePath("LogFoto"),
+ _ => throw new ArgumentOutOfRangeException(nameof(endpoint), endpoint, "Unsupported endpoint."),
+ };
+
+ return PostFormAsync(path, formFields, $"photo-admin-{endpoint}", cancellationToken);
+ }
+
+ public Task ExecutePublicLogonAsync(IReadOnlyDictionary formFields, CancellationToken cancellationToken = default)
+ {
+ return PostFormAsync(PublicLogonPath, formFields, "public-logon", cancellationToken);
+ }
+
+ public Task ExecuteUsersAsync(HttpMethod method, IReadOnlyDictionary? formFields = null, CancellationToken cancellationToken = default)
+ {
+ return SendCommandAsync(method, UsersPath, formFields, "public-users", cancellationToken);
+ }
+
+ public Task ExecuteFoto2Async(HttpMethod method, IReadOnlyDictionary? formFields = null, CancellationToken cancellationToken = default)
+ {
+ return SendCommandAsync(method, Foto2Path, formFields, "public-foto2", cancellationToken);
+ }
+
+ public Task DownloadThumbnailAsync(string filename, long? idFoto = null, CancellationToken cancellationToken = default)
+ {
+ ArgumentException.ThrowIfNullOrWhiteSpace(filename);
+ return DownloadFileAsync(ThumbnailPath, filename, idFoto, "media-thumbnail", cancellationToken);
+ }
+
+ public Task DownloadOriginalAsync(string filename, long? idFoto = null, CancellationToken cancellationToken = default)
+ {
+ ArgumentException.ThrowIfNullOrWhiteSpace(filename);
+ return DownloadFileAsync(OriginalPath, filename, idFoto, "media-original", cancellationToken);
+ }
+
+ private Task SendCommandAsync(HttpMethod method, string path, IReadOnlyDictionary? formFields, string operationName, CancellationToken cancellationToken)
+ {
+ ArgumentNullException.ThrowIfNull(method);
+
+ if (method == HttpMethod.Get)
+ {
+ var relativePath = AppendQuery(path, formFields);
+ return GetAsync(relativePath, operationName, cancellationToken);
+ }
+
+ if (method == HttpMethod.Post)
+ {
+ return PostFormAsync(path, formFields ?? new Dictionary(), operationName, cancellationToken);
+ }
+
+ throw new NotSupportedException($"Only GET and POST are supported. Requested method: {method}.");
+ }
+
+ private Task GetAsync(string relativePath, string operationName, CancellationToken cancellationToken)
+ {
+ return ExecuteWithResilienceAsync(
+ () => new HttpRequestMessage(HttpMethod.Get, relativePath),
+ ToRawResponseAsync,
+ operationName,
+ cancellationToken);
+ }
+
+ private Task PostFormAsync(string relativePath, IReadOnlyDictionary formFields, string operationName, CancellationToken cancellationToken)
+ {
+ return ExecuteWithResilienceAsync(
+ () =>
+ {
+ var request = new HttpRequestMessage(HttpMethod.Post, relativePath)
+ {
+ Content = BuildFormContent(formFields),
+ };
+
+ return request;
+ },
+ ToRawResponseAsync,
+ operationName,
+ cancellationToken);
+ }
+
+ private Task PostFormAndParseUploadAsync(string relativePath, IReadOnlyDictionary formFields, string operationName, CancellationToken cancellationToken)
+ {
+ return ExecuteWithResilienceAsync(
+ () =>
+ {
+ var request = new HttpRequestMessage(HttpMethod.Post, relativePath)
+ {
+ Content = BuildFormContent(formFields),
+ };
+
+ return request;
+ },
+ async (response, token) =>
+ {
+ var raw = await ToRawResponseAsync(response, token).ConfigureAwait(false);
+ return ParseSingleItemArray(raw.Body);
+ },
+ operationName,
+ cancellationToken);
+ }
+
+ private async Task PostMultipartAndParseUploadAsync(
+ string relativePath,
+ string operationName,
+ Stream fileStream,
+ string fileName,
+ string formFieldName,
+ string? contentType,
+ Action> configureRequiredFields,
+ IReadOnlyDictionary optionalFields,
+ CancellationToken cancellationToken)
+ {
+ ArgumentNullException.ThrowIfNull(fileStream);
+ ArgumentException.ThrowIfNullOrWhiteSpace(fileName);
+ ArgumentException.ThrowIfNullOrWhiteSpace(formFieldName);
+
+ var payload = await ReadAllBytesAsync(fileStream, cancellationToken).ConfigureAwait(false);
+
+ return await ExecuteWithResilienceAsync(
+ () =>
+ {
+ var multipart = new MultipartFormDataContent();
+ var fields = new Dictionary();
+ configureRequiredFields(fields);
+
+ foreach (var field in fields)
+ {
+ if (string.IsNullOrWhiteSpace(field.Value))
+ {
+ continue;
+ }
+
+ multipart.Add(new StringContent(field.Value, Encoding.UTF8), field.Key);
+ }
+
+ foreach (var field in optionalFields)
+ {
+ if (string.IsNullOrWhiteSpace(field.Value))
+ {
+ continue;
+ }
+
+ multipart.Add(new StringContent(field.Value, Encoding.UTF8), field.Key);
+ }
+
+ var fileContent = new ByteArrayContent(payload);
+ fileContent.Headers.ContentType = new MediaTypeHeaderValue(contentType ?? "application/octet-stream");
+ multipart.Add(fileContent, formFieldName, fileName);
+
+ return new HttpRequestMessage(HttpMethod.Post, relativePath)
+ {
+ Content = multipart,
+ };
+ },
+ async (response, token) =>
+ {
+ var raw = await ToRawResponseAsync(response, token).ConfigureAwait(false);
+ return ParseSingleItemArray(raw.Body);
+ },
+ operationName,
+ cancellationToken).ConfigureAwait(false);
+ }
+
+ private Task DownloadFileAsync(string basePath, string filename, long? idFoto, string operationName, CancellationToken cancellationToken)
+ {
+ var escapedFileName = Uri.EscapeDataString(filename);
+ var relativePath = idFoto.HasValue
+ ? $"{basePath}/{escapedFileName}?id_foto={idFoto.Value.ToString(System.Globalization.CultureInfo.InvariantCulture)}"
+ : $"{basePath}/{escapedFileName}";
+
+ return ExecuteWithResilienceAsync(
+ () => new HttpRequestMessage(HttpMethod.Get, relativePath),
+ async (response, token) =>
+ {
+ var content = await response.Content.ReadAsByteArrayAsync(token).ConfigureAwait(false);
+ return new MediaFileResponse
+ {
+ StatusCode = response.StatusCode,
+ Content = content,
+ ContentType = response.Content.Headers.ContentType?.MediaType,
+ FileName = response.Content.Headers.ContentDisposition?.FileNameStar ?? response.Content.Headers.ContentDisposition?.FileName,
+ Headers = BuildHeaders(response),
+ };
+ },
+ operationName,
+ cancellationToken);
+ }
+
+ private async Task ExecuteWithResilienceAsync(
+ Func requestFactory,
+ Func> responseFactory,
+ string operationName,
+ CancellationToken cancellationToken)
+ {
+ var options = _options.Value;
+ Exception? lastException = null;
+
+ for (var attempt = 0; attempt <= options.RetryCount; attempt++)
+ {
+ using var request = requestFactory();
+ using var timeoutCts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
+ timeoutCts.CancelAfter(options.RequestTimeout);
+
+ HttpResponseMessage? response = null;
+
+ try
+ {
+ response = await _httpClient
+ .SendAsync(request, HttpCompletionOption.ResponseHeadersRead, timeoutCts.Token)
+ .ConfigureAwait(false);
+
+ if (IsRetryableStatusCode(response.StatusCode) && attempt < options.RetryCount)
+ {
+ _logger.LogWarning(
+ "Operation {OperationName} received retryable status code {StatusCode} at attempt {Attempt}/{MaxAttempts}.",
+ operationName,
+ (int)response.StatusCode,
+ attempt + 1,
+ options.RetryCount + 1);
+
+ await DelayBeforeRetryAsync(options, attempt, cancellationToken).ConfigureAwait(false);
+ continue;
+ }
+
+ return await responseFactory(response, cancellationToken).ConfigureAwait(false);
+ }
+ catch (OperationCanceledException ex) when (!cancellationToken.IsCancellationRequested)
+ {
+ lastException = ex;
+
+ if (attempt < options.RetryCount)
+ {
+ _logger.LogWarning(ex, "Operation {OperationName} timed out at attempt {Attempt}/{MaxAttempts}.", operationName, attempt + 1, options.RetryCount + 1);
+ await DelayBeforeRetryAsync(options, attempt, cancellationToken).ConfigureAwait(false);
+ continue;
+ }
+
+ _logger.LogError(ex, "Operation {OperationName} timed out after {MaxAttempts} attempts.", operationName, options.RetryCount + 1);
+ throw;
+ }
+ catch (HttpRequestException ex)
+ {
+ lastException = ex;
+
+ if (attempt < options.RetryCount)
+ {
+ _logger.LogWarning(ex, "Operation {OperationName} failed with transient HTTP error at attempt {Attempt}/{MaxAttempts}.", operationName, attempt + 1, options.RetryCount + 1);
+ await DelayBeforeRetryAsync(options, attempt, cancellationToken).ConfigureAwait(false);
+ continue;
+ }
+
+ _logger.LogError(ex, "Operation {OperationName} failed with HTTP error after {MaxAttempts} attempts.", operationName, options.RetryCount + 1);
+ throw;
+ }
+ catch (Exception ex)
+ {
+ _logger.LogError(ex, "Operation {OperationName} failed with unexpected error at attempt {Attempt}/{MaxAttempts}.", operationName, attempt + 1, options.RetryCount + 1);
+ throw;
+ }
+ finally
+ {
+ response?.Dispose();
+ }
+ }
+
+ throw new HttpRequestException($"Operation '{operationName}' failed after {options.RetryCount + 1} attempts.", lastException);
+ }
+
+ private static bool IsRetryableStatusCode(HttpStatusCode statusCode)
+ {
+ return statusCode is HttpStatusCode.RequestTimeout
+ or HttpStatusCode.TooManyRequests
+ or HttpStatusCode.BadGateway
+ or HttpStatusCode.ServiceUnavailable
+ or HttpStatusCode.GatewayTimeout
+ or HttpStatusCode.InternalServerError;
+ }
+
+ private static async Task DelayBeforeRetryAsync(CatalogCommunicationOptions options, int attempt, CancellationToken cancellationToken)
+ {
+ var delay = TimeSpan.FromMilliseconds(options.RetryBaseDelay.TotalMilliseconds * Math.Pow(2, attempt));
+ await Task.Delay(delay, cancellationToken).ConfigureAwait(false);
+ }
+
+ private static FormUrlEncodedContent BuildFormContent(IReadOnlyDictionary formFields)
+ {
+ var pairs = formFields
+ .Where(kvp => !string.IsNullOrWhiteSpace(kvp.Value))
+ .Select(kvp => new KeyValuePair(kvp.Key, kvp.Value!));
+
+ return new FormUrlEncodedContent(pairs);
+ }
+
+ private static string AppendQuery(string path, IReadOnlyDictionary? query)
+ {
+ if (query is null || query.Count == 0)
+ {
+ return path;
+ }
+
+ var encodedPairs = query
+ .Where(kvp => !string.IsNullOrWhiteSpace(kvp.Value))
+ .Select(kvp => $"{Uri.EscapeDataString(kvp.Key)}={Uri.EscapeDataString(kvp.Value!)}")
+ .ToArray();
+
+ if (encodedPairs.Length == 0)
+ {
+ return path;
+ }
+
+ var separator = path.Contains('?', StringComparison.Ordinal) ? "&" : "?";
+ return string.Concat(path, separator, string.Join("&", encodedPairs));
+ }
+
+ private static async Task ToRawResponseAsync(HttpResponseMessage response, CancellationToken cancellationToken)
+ {
+ var body = await response.Content.ReadAsStringAsync(cancellationToken).ConfigureAwait(false);
+
+ return new RawEndpointResponse
+ {
+ StatusCode = response.StatusCode,
+ Body = body,
+ Headers = BuildHeaders(response),
+ };
+ }
+
+ private static IReadOnlyDictionary> BuildHeaders(HttpResponseMessage response)
+ {
+ var headers = new Dictionary>(StringComparer.OrdinalIgnoreCase);
+
+ foreach (var header in response.Headers)
+ {
+ headers[header.Key] = header.Value.ToArray();
+ }
+
+ foreach (var header in response.Content.Headers)
+ {
+ headers[header.Key] = header.Value.ToArray();
+ }
+
+ return headers;
+ }
+
+ private static TUpload? ParseSingleItemArray(string json)
+ {
+ if (string.IsNullOrWhiteSpace(json))
+ {
+ return default;
+ }
+
+ var items = JsonSerializer.Deserialize>(json, JsonOptions);
+ return items is { Count: > 0 } ? items[0] : default;
+ }
+
+ private static async Task ReadAllBytesAsync(Stream stream, CancellationToken cancellationToken)
+ {
+ if (stream.CanSeek)
+ {
+ stream.Position = 0;
+ }
+
+ using var memoryStream = new MemoryStream();
+ await stream.CopyToAsync(memoryStream, cancellationToken).ConfigureAwait(false);
+ return memoryStream.ToArray();
+ }
+
+ private string GetAdminPagePath(string pageName)
+ {
+ var basePath = _options.Value.AdminPageBasePath.Trim('/');
+ return $"{basePath}/{pageName}.abl";
+ }
+
+ private string GetReceiveFilePath()
+ {
+ var value = _options.Value.ReceiveFilePath;
+ if (string.IsNullOrWhiteSpace(value))
+ {
+ return "ReceiveFile.abl";
+ }
+
+ return value.Trim();
+ }
+}
diff --git a/Catalog.code-workspace b/Catalog.code-workspace
new file mode 100644
index 0000000..93418a7
--- /dev/null
+++ b/Catalog.code-workspace
@@ -0,0 +1,17 @@
+{
+ "folders": [
+ {
+ "path": "."
+ },
+ {
+ "path": "../AIFotoONLUS"
+ },
+ {
+ "path": "../../various/regalamiunsorriso"
+ }
+ ],
+ "settings": {
+ "commentTranslate.hover.enabled": false,
+ "github.copilot.chat.otel.dbSpanExporter.enabled": true
+ }
+}
\ No newline at end of file
diff --git a/Catalog.sln b/Catalog.sln
deleted file mode 100644
index 237b063..0000000
--- a/Catalog.sln
+++ /dev/null
@@ -1,122 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 17
-VisualStudioVersion = 17.11.35312.102
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ImageCatalog 2", "imagecatalog\ImageCatalog 2.csproj", "{3F1E23DB-435E-0590-1EF5-735E898DBA3C}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ImageCatalog 3", "ImageCatalogCS\ImageCatalog 3.csproj", "{D11ED7B0-93E8-4F38-A142-EED72D7EE8B5}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CatalogLib", "CatalogLib\CatalogLib.csproj", "{D27ACCF2-80FC-4DE8-AEB8-351FF076E6D5}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WPFCatalog", "WPFCatalog\WPFCatalog.csproj", "{638DE501-CECA-4744-B293-7AE93CAEEB01}"
-EndProject
-Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "CatalogVbLib", "CatalogVbLib\CatalogVbLib.vbproj", "{44465926-240D-473F-90B8-786BA4384406}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{A3D50937-74F6-4DC8-8D89-B534B484C0F9}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MaddoShared", "MaddoShared\MaddoShared.csproj", "{AEBFE9E3-277C-4A7B-8448-145D1B11998B}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ImageCatalogParallel", "ImageCatalogParallel\ImageCatalogParallel.csproj", "{0F42DA5C-2788-48BD-BACA-01625C3CFFBB}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MaddoLibrary.Base.NET46", "MaddoLibrary\MaddoLibrary.Base.NET46\MaddoLibrary.Base.NET46.csproj", "{E93DAAE6-4AA9-4A45-AFB6-58209B3AD3C9}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MaddoLibrary.WPF.NET46", "MaddoLibrary\MaddoLibrary.WPF.NET46\MaddoLibrary.WPF.NET46.csproj", "{73DA19D7-196D-4B16-B610-93250978A607}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- Debug|x64 = Debug|x64
- Debug|x86 = Debug|x86
- Release|Any CPU = Release|Any CPU
- Release|x64 = Release|x64
- Release|x86 = Release|x86
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {3F1E23DB-435E-0590-1EF5-735E898DBA3C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {3F1E23DB-435E-0590-1EF5-735E898DBA3C}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {3F1E23DB-435E-0590-1EF5-735E898DBA3C}.Debug|x64.ActiveCfg = Debug|Any CPU
- {3F1E23DB-435E-0590-1EF5-735E898DBA3C}.Debug|x64.Build.0 = Debug|Any CPU
- {3F1E23DB-435E-0590-1EF5-735E898DBA3C}.Debug|x86.ActiveCfg = Debug|x86
- {3F1E23DB-435E-0590-1EF5-735E898DBA3C}.Debug|x86.Build.0 = Debug|x86
- {3F1E23DB-435E-0590-1EF5-735E898DBA3C}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {3F1E23DB-435E-0590-1EF5-735E898DBA3C}.Release|Any CPU.Build.0 = Release|Any CPU
- {3F1E23DB-435E-0590-1EF5-735E898DBA3C}.Release|x64.ActiveCfg = Release|x64
- {3F1E23DB-435E-0590-1EF5-735E898DBA3C}.Release|x64.Build.0 = Release|x64
- {3F1E23DB-435E-0590-1EF5-735E898DBA3C}.Release|x86.ActiveCfg = Release|x86
- {3F1E23DB-435E-0590-1EF5-735E898DBA3C}.Release|x86.Build.0 = Release|x86
- {D11ED7B0-93E8-4F38-A142-EED72D7EE8B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {D11ED7B0-93E8-4F38-A142-EED72D7EE8B5}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {D11ED7B0-93E8-4F38-A142-EED72D7EE8B5}.Debug|x64.ActiveCfg = Debug|x64
- {D11ED7B0-93E8-4F38-A142-EED72D7EE8B5}.Debug|x64.Build.0 = Debug|x64
- {D11ED7B0-93E8-4F38-A142-EED72D7EE8B5}.Debug|x86.ActiveCfg = Debug|Any CPU
- {D11ED7B0-93E8-4F38-A142-EED72D7EE8B5}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {D11ED7B0-93E8-4F38-A142-EED72D7EE8B5}.Release|Any CPU.Build.0 = Release|Any CPU
- {D11ED7B0-93E8-4F38-A142-EED72D7EE8B5}.Release|x64.ActiveCfg = Release|x64
- {D11ED7B0-93E8-4F38-A142-EED72D7EE8B5}.Release|x64.Build.0 = Release|x64
- {D11ED7B0-93E8-4F38-A142-EED72D7EE8B5}.Release|x86.ActiveCfg = Release|Any CPU
- {D27ACCF2-80FC-4DE8-AEB8-351FF076E6D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {D27ACCF2-80FC-4DE8-AEB8-351FF076E6D5}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {D27ACCF2-80FC-4DE8-AEB8-351FF076E6D5}.Debug|x64.ActiveCfg = Debug|x64
- {D27ACCF2-80FC-4DE8-AEB8-351FF076E6D5}.Debug|x64.Build.0 = Debug|x64
- {D27ACCF2-80FC-4DE8-AEB8-351FF076E6D5}.Debug|x86.ActiveCfg = Debug|Any CPU
- {D27ACCF2-80FC-4DE8-AEB8-351FF076E6D5}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {D27ACCF2-80FC-4DE8-AEB8-351FF076E6D5}.Release|Any CPU.Build.0 = Release|Any CPU
- {D27ACCF2-80FC-4DE8-AEB8-351FF076E6D5}.Release|x64.ActiveCfg = Release|x64
- {D27ACCF2-80FC-4DE8-AEB8-351FF076E6D5}.Release|x64.Build.0 = Release|x64
- {D27ACCF2-80FC-4DE8-AEB8-351FF076E6D5}.Release|x86.ActiveCfg = Release|Any CPU
- {638DE501-CECA-4744-B293-7AE93CAEEB01}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {638DE501-CECA-4744-B293-7AE93CAEEB01}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {638DE501-CECA-4744-B293-7AE93CAEEB01}.Debug|x64.ActiveCfg = Debug|x64
- {638DE501-CECA-4744-B293-7AE93CAEEB01}.Debug|x64.Build.0 = Debug|x64
- {638DE501-CECA-4744-B293-7AE93CAEEB01}.Debug|x86.ActiveCfg = Debug|Any CPU
- {638DE501-CECA-4744-B293-7AE93CAEEB01}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {638DE501-CECA-4744-B293-7AE93CAEEB01}.Release|Any CPU.Build.0 = Release|Any CPU
- {638DE501-CECA-4744-B293-7AE93CAEEB01}.Release|x64.ActiveCfg = Release|x64
- {638DE501-CECA-4744-B293-7AE93CAEEB01}.Release|x64.Build.0 = Release|x64
- {638DE501-CECA-4744-B293-7AE93CAEEB01}.Release|x86.ActiveCfg = Release|Any CPU
- {44465926-240D-473F-90B8-786BA4384406}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {44465926-240D-473F-90B8-786BA4384406}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {44465926-240D-473F-90B8-786BA4384406}.Debug|x64.ActiveCfg = Debug|x64
- {44465926-240D-473F-90B8-786BA4384406}.Debug|x64.Build.0 = Debug|x64
- {44465926-240D-473F-90B8-786BA4384406}.Debug|x86.ActiveCfg = Debug|Any CPU
- {44465926-240D-473F-90B8-786BA4384406}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {44465926-240D-473F-90B8-786BA4384406}.Release|Any CPU.Build.0 = Release|Any CPU
- {44465926-240D-473F-90B8-786BA4384406}.Release|x64.ActiveCfg = Release|x64
- {44465926-240D-473F-90B8-786BA4384406}.Release|x64.Build.0 = Release|x64
- {44465926-240D-473F-90B8-786BA4384406}.Release|x86.ActiveCfg = Release|Any CPU
- {AEBFE9E3-277C-4A7B-8448-145D1B11998B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {AEBFE9E3-277C-4A7B-8448-145D1B11998B}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {AEBFE9E3-277C-4A7B-8448-145D1B11998B}.Debug|x64.ActiveCfg = Debug|Any CPU
- {AEBFE9E3-277C-4A7B-8448-145D1B11998B}.Debug|x64.Build.0 = Debug|Any CPU
- {AEBFE9E3-277C-4A7B-8448-145D1B11998B}.Debug|x86.ActiveCfg = Debug|Any CPU
- {AEBFE9E3-277C-4A7B-8448-145D1B11998B}.Debug|x86.Build.0 = Debug|Any CPU
- {AEBFE9E3-277C-4A7B-8448-145D1B11998B}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {AEBFE9E3-277C-4A7B-8448-145D1B11998B}.Release|Any CPU.Build.0 = Release|Any CPU
- {AEBFE9E3-277C-4A7B-8448-145D1B11998B}.Release|x64.ActiveCfg = Release|Any CPU
- {AEBFE9E3-277C-4A7B-8448-145D1B11998B}.Release|x64.Build.0 = Release|Any CPU
- {AEBFE9E3-277C-4A7B-8448-145D1B11998B}.Release|x86.ActiveCfg = Release|Any CPU
- {AEBFE9E3-277C-4A7B-8448-145D1B11998B}.Release|x86.Build.0 = Release|Any CPU
- {0F42DA5C-2788-48BD-BACA-01625C3CFFBB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {0F42DA5C-2788-48BD-BACA-01625C3CFFBB}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {0F42DA5C-2788-48BD-BACA-01625C3CFFBB}.Debug|x64.ActiveCfg = Debug|Any CPU
- {0F42DA5C-2788-48BD-BACA-01625C3CFFBB}.Debug|x64.Build.0 = Debug|Any CPU
- {0F42DA5C-2788-48BD-BACA-01625C3CFFBB}.Debug|x86.ActiveCfg = Debug|Any CPU
- {0F42DA5C-2788-48BD-BACA-01625C3CFFBB}.Debug|x86.Build.0 = Debug|Any CPU
- {0F42DA5C-2788-48BD-BACA-01625C3CFFBB}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {0F42DA5C-2788-48BD-BACA-01625C3CFFBB}.Release|Any CPU.Build.0 = Release|Any CPU
- {0F42DA5C-2788-48BD-BACA-01625C3CFFBB}.Release|x64.ActiveCfg = Release|Any CPU
- {0F42DA5C-2788-48BD-BACA-01625C3CFFBB}.Release|x64.Build.0 = Release|Any CPU
- {0F42DA5C-2788-48BD-BACA-01625C3CFFBB}.Release|x86.ActiveCfg = Release|Any CPU
- {0F42DA5C-2788-48BD-BACA-01625C3CFFBB}.Release|x86.Build.0 = Release|Any CPU
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(NestedProjects) = preSolution
- {AEBFE9E3-277C-4A7B-8448-145D1B11998B} = {A3D50937-74F6-4DC8-8D89-B534B484C0F9}
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- SolutionGuid = {0E3ABC63-8601-4DAC-AFEA-33F3E8E36757}
- EndGlobalSection
-EndGlobal
diff --git a/Catalog.slnx b/Catalog.slnx
new file mode 100644
index 0000000..e3c90bb
--- /dev/null
+++ b/Catalog.slnx
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/CatalogLib/CatalogLib.csproj b/CatalogLib/CatalogLib.csproj
deleted file mode 100644
index 631add3..0000000
--- a/CatalogLib/CatalogLib.csproj
+++ /dev/null
@@ -1,196 +0,0 @@
-
-
-
-
- Debug
- AnyCPU
- {D27ACCF2-80FC-4DE8-AEB8-351FF076E6D5}
- Library
- Properties
- CatalogLib
- CatalogLib
- v4.8
- 512
- SAK
- SAK
- SAK
- SAK
-
-
-
- true
- full
- false
- bin\Debug\
- DEBUG;TRACE
- prompt
- 4
-
-
- pdbonly
- true
- bin\Release\
- TRACE
- prompt
- 4
-
-
- true
- bin\x64\Debug\
- DEBUG;TRACE
- full
- x64
- prompt
- MinimumRecommendedRules.ruleset
-
-
- bin\x64\Release\
- TRACE
- true
- pdbonly
- x64
- prompt
- MinimumRecommendedRules.ruleset
-
-
-
- ..\packages\Microsoft.Win32.Primitives.4.3.0\lib\net46\Microsoft.Win32.Primitives.dll
-
-
- ..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll
- True
-
-
- ..\packages\SixLabors.Core.1.0.0-beta0002\lib\netstandard1.1\SixLabors.Core.dll
-
-
- ..\packages\SixLabors.Fonts.1.0.0-beta0001\lib\netstandard1.3\SixLabors.Fonts.dll
-
-
- ..\packages\SixLabors.ImageSharp.1.0.0-beta0001\lib\netstandard1.3\SixLabors.ImageSharp.dll
-
-
- ..\packages\SixLabors.ImageSharp.Drawing.1.0.0-beta0001\lib\netstandard1.1\SixLabors.ImageSharp.Drawing.dll
-
-
- ..\packages\SixLabors.Shapes.1.0.0-beta0001\lib\netstandard1.1\SixLabors.Shapes.dll
-
-
- ..\packages\SixLabors.Shapes.Text.1.0.0-beta0001\lib\netstandard1.1\SixLabors.Shapes.Text.dll
-
-
-
- ..\packages\System.AppContext.4.3.0\lib\net46\System.AppContext.dll
-
-
- ..\packages\System.Buffers.4.4.0\lib\netstandard1.1\System.Buffers.dll
-
-
- ..\packages\System.Collections.Immutable.1.4.0\lib\portable-net45+win8+wp8+wpa81\System.Collections.Immutable.dll
-
-
-
- ..\packages\System.Console.4.3.0\lib\net46\System.Console.dll
-
-
-
- ..\packages\System.Diagnostics.DiagnosticSource.4.3.0\lib\net46\System.Diagnostics.DiagnosticSource.dll
-
-
-
- ..\packages\System.Globalization.Calendars.4.3.0\lib\net46\System.Globalization.Calendars.dll
-
-
- ..\packages\System.IO.Compression.4.3.0\lib\net46\System.IO.Compression.dll
-
-
-
- ..\packages\System.IO.Compression.ZipFile.4.3.0\lib\net46\System.IO.Compression.ZipFile.dll
-
-
- ..\packages\System.IO.FileSystem.4.3.0\lib\net46\System.IO.FileSystem.dll
-
-
- ..\packages\System.IO.FileSystem.Primitives.4.3.0\lib\net46\System.IO.FileSystem.Primitives.dll
-
-
- ..\packages\System.Memory.4.4.0-preview2-25405-01\lib\netstandard1.0\System.Memory.dll
-
-
- ..\packages\System.Net.Http.4.3.0\lib\net46\System.Net.Http.dll
-
-
- ..\packages\System.Net.Sockets.4.3.0\lib\net46\System.Net.Sockets.dll
-
-
-
- ..\packages\System.Numerics.Vectors.4.4.0\lib\net46\System.Numerics.Vectors.dll
-
-
- ..\packages\System.Runtime.CompilerServices.Unsafe.4.4.0\lib\netstandard1.0\System.Runtime.CompilerServices.Unsafe.dll
-
-
- ..\packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll
-
-
- ..\packages\System.Security.Cryptography.Algorithms.4.3.0\lib\net46\System.Security.Cryptography.Algorithms.dll
-
-
- ..\packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll
-
-
- ..\packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll
-
-
- ..\packages\System.Security.Cryptography.X509Certificates.4.3.0\lib\net46\System.Security.Cryptography.X509Certificates.dll
-
-
- ..\packages\System.ValueTuple.4.4.0\lib\netstandard1.0\System.ValueTuple.dll
-
-
-
-
-
-
-
- ..\packages\System.Xml.ReaderWriter.4.3.0\lib\net46\System.Xml.ReaderWriter.dll
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {44465926-240d-473f-90b8-786ba4384406}
- CatalogVbLib
-
-
- {e93daae6-4aa9-4a45-afb6-58209b3ad3c9}
- MaddoLibrary.Base.NET46
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/CatalogLib/Class1.cs b/CatalogLib/Class1.cs
deleted file mode 100644
index a63356c..0000000
--- a/CatalogLib/Class1.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-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/Enums.cs b/CatalogLib/Enums.cs
deleted file mode 100644
index 831a7c4..0000000
--- a/CatalogLib/Enums.cs
+++ /dev/null
@@ -1,41 +0,0 @@
-namespace CatalogLib
-{
- public enum Positions
- {
- Alto,
- Centro,
- Basso
- }
-
- public enum Alignments
- {
- Sinistra,
- Centro,
- Destra
- }
-
- public enum ResizeModes
- {
- Bicubic,
- Box,
- CatmullRom,
- Hermite,
- Lanczos2,
- Lanczos3,
- Lanczos5,
- Lanczos8,
- MitchellNetravali,
- NearestNeighbor,
- Robidoux,
- Spline,
- Triangle,
- Welch
-
- }
-
- public enum ResizeDimensions
- {
- LatoLungo,
- LatoCorto
- }
-}
\ No newline at end of file
diff --git a/CatalogLib/ImageCreator.cs b/CatalogLib/ImageCreator.cs
deleted file mode 100644
index 869544b..0000000
--- a/CatalogLib/ImageCreator.cs
+++ /dev/null
@@ -1,618 +0,0 @@
-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 Variabili
-
- private SinglePicData _singlePicData;
- private PicSettings _picSettings;
-
- private Rotazione _rotation;
-
- //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 ImageCreator(SinglePicData picData, PicSettings picSettings)
- {
-
- }
-
- ///
- /// Elabora l'immagine
- ///
- /// Non ne ho idea. ToDo: capire a che serve
- public void CreaImmagineThread(string info)
- {
-
- //CatalogLib.PicSettings ps = new CatalogLib.PicSettings();
-
- PreparaVariabili();
-
- // Workfile deve essere impostato esternamente. ToDo: passarlo come parametro così da potere riutilizzare la classe senza eliminarla e ricrearla
- Image g = Image.FromFile(WorkFile.FullName);
-
- ImpostaTestoExtra(g);
-
- // Rotazione immagine in base ai dati EXIF
- Rotation(ref g);
-
- // Impostazione del formato
- // todo: mettere una selezione più specifica invece di assumere jpg
- ImageFormat currentFormat = g.RawFormat;
- if (_picSettings.UsaForzaJpg)
- {
- currentFormat = ImageFormat.Jpeg;
- }
-
- PrepareThumbnailSize(g);
-
- // big image resolution
- var imgOutputBig = new Bitmap(g, thumbSizeBig.Width, thumbSizeBig.Height);
- imgOutputBig.SetResolution(g.HorizontalResolution, g.VerticalResolution);
-
-
- if (_picSettings.CreaMiniature)
- {
-
- CreaMiniature(g, imgOutputBig, currentFormat);
- }
-
-
-
-
-
-
- }
-
-
- private void Rotation(ref System.Drawing.Image g)
- {
- //FotoRuotaADestra = false;
- //FotoRuotaASinistra = false;
- _rotation = Rotazione.Normale;
-
- if (_picSettings.GeneraleRotazioneAutomatica)
- {
- // 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;
- _rotation = Rotazione.Sinistra;
- break;
- case ExifReader.Orientations.RightBottom:
-
- break;
- case ExifReader.Orientations.RightTop:
-
- break;
- case ExifReader.Orientations.TopLeft:
-
- break;
- case ExifReader.Orientations.TopRight:
-
- break;
- }
- }
- }
-
- if (_rotation == Rotazione.Sinistra)
- {
- g.RotateFlip(RotateFlipType.Rotate270FlipNone);
- }else
- if (_rotation == Rotazione.Destra)
- {
- g.RotateFlip(RotateFlipType.Rotate90FlipNone);
- }
- // todo: capire quando va ruotato a destra
- }
-
- ///
- /// Aggiunge orario e tempo gara
- ///
- ///
- private void ImpostaTestoExtra(Image g)
- {
- if (_picSettings.UsaOrarioTestoApplicare ||
- _picSettings.UsaTempoGaraTestoApplicare ||
- _picSettings.UsaOrarioMiniatura ||
- _picSettings.TestoMin ||
- _picSettings.AggTempoGaraMin ||
- _picSettings.AggNumTempMin)
- {
- if (g.PropertyIdList.Length > 0) //ci sono dati exif
- {
- var datiExix = new ExifReader((Bitmap)g);
- dataFoto = datiExix.DateTimeOriginal;
- testoFirma = _picSettings.TestoFirmaStart;
- testoFirmaV = _picSettings.TestoFirmaStartV;
-
- if (dataFoto.Year != 1)
- {
- testoFirmaPiccola = dataFoto.ToShortDateString();
- if (_picSettings.UsaOrarioTestoApplicare)
- {
- testoFirma = $"{testoFirma} {dataFoto.ToShortDateString()} {dataFoto.ToLongDateString()}";
- testoFirmaV = $"{testoFirmaV} {dataFoto.ToShortDateString()} {dataFoto.ToLongDateString()}";
- //testoFirma = string.Concat(testoFirma, " ", dataFoto.ToShortDateString(), " ", dataFoto.ToLongDateString());
- //testoFirmaV = string.Concat(testoFirmaV, " ", dataFoto.ToShortDateString(), " ", dataFoto.ToLongDateString());
-
- }
- if (_picSettings.UsaTempoGaraTestoApplicare)
- {
- //TimeSpan orario = dataPartenzaI - dataFoto;
-
- string orarioString = (dataPartenzaI - dataFoto).ToString(@"hh\:mm\:ss");
-
- testoFirma = $"{testoFirma} {testoOrario} {orarioString}";
- testoFirmaV = $"{testoFirmaV} {testoOrario} {orarioString}";
-
- //testoFirma = string.Concat(testoFirma, " ", testoOrario, orario.ToString(@"hh\:mm\:ss"));
- //testoFirmaV = string.Concat(testoFirmaV, " ", testoOrario, orario.ToString(@"hh\:mm\:ss"));
- }
- }
- }
- }
- else
- {
- testoFirma = _picSettings.TestoFirmaStart;
- testoFirmaV = _picSettings.TestoFirmaStartV;
- }
- }
-
- ///
- /// Preparazione delle variabili a valori di default e caricamento da impostazioni
- ///
- private void PreparaVariabili()
- {
- alphaScelta = (int)(255 * (100 - _picSettings.Trasparenza) / 100);
- testoFirma = string.Empty;
- testoFirmaV = string.Empty;
- dataPartenzaI = _picSettings.DataPartenza;
- testoOrario = _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 = _picSettings.DimStandard;
- _dimensioneStandardMiniatura = _picSettings.DimStandardMiniatura;
-
- nomeFileSmall = _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;
-
- thumbSizeBig = new Size(g.Width, g.Height);
- }
- else
- {
- thumbSizeSmall = NewthumbSize(g.Width, g.Height, CatalogVbLib.PicSettings.AltezzaSmall, "Altezza");
-
- thumbSizeBig = new Size(g.Width, g.Height);
- }
- }
-
- private void CreaMiniature(Image g, Bitmap imgOutputBig, ImageFormat thisFormat)
- {
-// CatalogLib.PicSettings ps = new PicSettings();
-
- if (_picSettings.TestoMin)
- {
- testoFirmaPiccola = nomeFileBig;
- }
- else if (_picSettings.AggNumTempMin)
- {
- testoFirmaPiccola = nomeFileBig + " ";
- }
-
- Font crFont1;
- Font crFont2;
- SizeF crSize1 = new SizeF();
- SizeF crSize2 = new SizeF();
-
- if (_picSettings.CreaMiniature)
- {
- if (!_picSettings.AggiungiScritteMiniature)
- {
- if (string.Equals(_picSettings.DirectorySorgente, _picSettings.DirectoryDestinazione, StringComparison.CurrentCultureIgnoreCase))
- {
- nomeFileSmall = nomeFileSmall.Substring(0, nomeFileSmall.Length - 4) + _picSettings.Codice +
- nomeFileSmall.Substring(nomeFileSmall.Length - 4);
- }
-
- if (_picSettings.UsaOrarioMiniatura ||
- _picSettings.TestoMin ||
- _picSettings.AggTempoGaraMin ||
- _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 = _picSettings.Grassetto;
- crFont1 = new Font(_picSettings.IlFont, _dimensioneStandardMiniatura, grassetto ? FontStyle.Bold : FontStyle.Regular);
- crFont2 = new Font(_picSettings.IlFont, _dimensioneStandard, grassetto ? FontStyle.Bold : FontStyle.Regular);
-
- crSize1 = grPhoto1.MeasureString(testoFirmaPiccola, crFont1);
- crSize2 = grPhoto1.MeasureString(testoFirma, crFont1);
-
- larghezzaStandard1 = (int)crSize1.Width;
-
- if (crSize1.Width > g.Width)
- {
- int conta = _dimensioneStandardMiniatura;
- do
- {
- if (conta > 20)
- {
- conta -= 5;
- }
- else
- {
- conta -= 1;
- }
-
- crFont1 = new Font(_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 (_picSettings.TextPosition.ToString().ToUpper())
- {
- case "ALTO":
- yPosFromBottom1 = _picSettings.Margine;
- yPosFromBottom4 = _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 (_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 (_picSettings.Grassetto)
- {
- crFont1 = new Font(_picSettings.IlFont, _dimensioneStandardMiniatura, FontStyle.Bold);
- }
- else
- {
- crFont1 = new Font(_picSettings.IlFont, _dimensioneStandardMiniatura);
- }
-
- 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 = (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 (_picSettings.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/ImageCreator2.cs b/CatalogLib/ImageCreator2.cs
deleted file mode 100644
index c10607d..0000000
--- a/CatalogLib/ImageCreator2.cs
+++ /dev/null
@@ -1,166 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Drawing;
-using System.Drawing.Imaging;
-using System.IO;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using CatalogVbLib;
-
-namespace CatalogLib
-{
- public class ImageCreator2 : IImageProcessor
- {
- private PicSettings _picSettings = PicSettings.Instance;
-
- private FileInfo _workFile;
-
- private Image _workingImage;
-
- private Rotazione _rotation;
-
- private ImageFormat _currentFormat;
-
- private Size _newImageSize;
-
- private Bitmap _outputImage;
-
- private DirectoryInfo _destDir;
-
- private string _nomeFileBig;
-
- public void Start(FileInfo workFile)
- {
- _workFile = workFile;
-
- _workingImage = Image.FromFile(workFile.FullName);
-
- _destDir = new DirectoryInfo(_picSettings.DirectoryDestinazione);
- _nomeFileBig = _workFile.Name;
-
- CalculateImageSize();
-
- ElaborazioneTesto();
-
- ElaborazioneRotazione();
-
- SetImageFormat();
-
-
- FinalElaboration();
-
- //CreaMiniature
- }
-
- private void FinalElaboration()
- {
- _outputImage = new Bitmap(_workingImage, _newImageSize.Width, _newImageSize.Height);
- _outputImage.SetResolution(_workingImage.HorizontalResolution, _workingImage.VerticalResolution);
-
-
- SavePic(_outputImage, Path.Combine(_destDir.FullName, _nomeFileBig));
- }
-
- private void SavePic(Bitmap imageToSave, string fileName)
- {
- var selectedEncoder = GetEncoder(_currentFormat);
- var encoder = System.Drawing.Imaging.Encoder.Quality;
- var encoderParameters = new EncoderParameters(1);
-
-
- if (Equals(_currentFormat, ImageFormat.Jpeg))
- {
- var encoderParameter = new EncoderParameter(encoder, _picSettings.CompressioneJpeg);
- encoderParameters.Param[0] = encoderParameter;
- }
-
- imageToSave.Save(fileName, selectedEncoder,encoderParameters);
- imageToSave.Dispose();
- }
-
- private ImageCodecInfo GetEncoder(ImageFormat format)
- {
- var codecs = ImageCodecInfo.GetImageDecoders();
-
- return codecs.FirstOrDefault(c => c.FormatID == format.Guid);
- }
-
- private void ElaborazioneTesto()
- {
- if (_picSettings.EnableText)
- {
- // todo: elaborazione testo
- }
- }
-
- private void CalculateImageSize()
- {
- _newImageSize = new Size(_workingImage.Width, _workingImage.Height);
- }
-
- private void ElaborazioneRotazione()
- {
-
- _rotation = Rotazione.Normale;
-
- if (_picSettings.GeneraleRotazioneAutomatica)
- {
- // ci sono dati exif
- if (_workingImage.PropertyIdList.Length > 0)
- {
- ExifReader DatiExif = new ExifReader((Bitmap)_workingImage);
-
- switch (DatiExif.Orientation)
- {
- case ExifReader.Orientations.BottomLeft:
-
- break;
- case ExifReader.Orientations.BottomRight:
-
- break;
- case ExifReader.Orientations.LeftTop:
-
- break;
- case ExifReader.Orientations.LftBottom:
- //FotoRuotaASinistra = true;
- _rotation = Rotazione.Sinistra;
- break;
- case ExifReader.Orientations.RightBottom:
-
- break;
- case ExifReader.Orientations.RightTop:
-
- break;
- case ExifReader.Orientations.TopLeft:
-
- break;
- case ExifReader.Orientations.TopRight:
-
- break;
- }
- }
- }
-
- if (_rotation == Rotazione.Sinistra)
- {
- _workingImage.RotateFlip(RotateFlipType.Rotate270FlipNone);
- }
- else
- if (_rotation == Rotazione.Destra)
- {
- _workingImage.RotateFlip(RotateFlipType.Rotate90FlipNone);
- }
- }
-
- private void SetImageFormat()
- {
- _currentFormat = _workingImage.RawFormat;
- if (_picSettings.GeneraleForzaJPG)
- {
- _currentFormat = ImageFormat.Jpeg;
- }
- }
-
- }
-}
diff --git a/CatalogLib/ImgSharpCreator.cs b/CatalogLib/ImgSharpCreator.cs
deleted file mode 100644
index aa053a6..0000000
--- a/CatalogLib/ImgSharpCreator.cs
+++ /dev/null
@@ -1,549 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.IO;
-using System.Linq;
-using System.Numerics;
-using System.Threading.Tasks;
-using MaddoLibrary.Base.Log;
-using SixLabors.Fonts;
-using SixLabors.ImageSharp;
-using SixLabors.ImageSharp.Drawing;
-using SixLabors.ImageSharp.Formats.Jpeg;
-using SixLabors.ImageSharp.MetaData.Profiles.Exif;
-using SixLabors.ImageSharp.Processing;
-using SixLabors.Primitives;
-using Font = SixLabors.Fonts.Font;
-using FontFamily = SixLabors.Fonts.FontFamily;
-using FontStyle = SixLabors.Fonts.FontStyle;
-using Rgba32 = SixLabors.ImageSharp.Rgba32;
-using Image = SixLabors.ImageSharp.Image;
-
-namespace CatalogLib
-{
- public class ImgSharpCreator : IImageProcessor
- {
- private Image _logo;
- public ImgSharpCreator()
- {
- if (!PicSettings.Instance.EnableLogo) return;
- if (string.IsNullOrWhiteSpace(PicSettings.Instance.LogoPath)) return;
- if (!File.Exists(PicSettings.Instance.LogoPath)) return;
-
- _logo = Image.Load(PicSettings.Instance.LogoPath);
-
- }
- private FileInfo _currentFile;
- public void Start(FileInfo workFile)
- {
-
- Stopwatch s = new Stopwatch();
- s.Start();
-
- _currentFile = workFile;
-
-
-
- using (Image image = Image.Load(workFile.FullName)/* new Image(workFile.FullName)*/)
- {
- MaddoLogger.Log("Loaded Image: {0}", workFile.FullName);
- //image.Rotate(-90);
- bool isRotated;
-
- var orientation = image.MetaData.ExifProfile.GetValue(ExifTag.Orientation);
- if ((ushort)orientation.Value != 1)
- {
- isRotated = true;
- }
- else
- {
- isRotated = false;
- }
-
- if (PicSettings.Instance.FotoRidimensiona)
- {
- Resize(image);
- }
-
-
- if (PicSettings.Instance.GeneraleRotazioneAutomatica)
- {
- image.Mutate(img => img.AutoOrient());
- MaddoLogger.Log("Rotated Image: {0}", workFile.FullName);
- //image.AutoOrient();
-
- //var exif = image.MetaData.ExifProfile;
- //if (exif != null)
- //{
- // var o = exif.GetValue(ExifTag.Orientation);
- // if (o != null)
- // {
- // var v = (ushort)o.Value;
-
-
-
- // switch (v)
- // {
-
-
- // //1 = Horizontal(normal)
- // //2 = Mirror horizontal
- // //3 = Rotate 180
- // //4 = Mirror vertical
- // //5 = Mirror horizontal and rotate 270 CW
- // //6 = Rotate 90 CW
- // //7 = Mirror horizontal and rotate 90 CW
- // //8 = Rotate 270 CW
- // case 1:
- // break;
- // case 2:
- // image.Flip(FlipType.Horizontal);
- // break;
- // case 3:
- // //image.Rotate(180f);
-
- // //image.Rotate(90);
- // image.Rotate(RotateType.Rotate180);
- // break;
- // case 4:
- // image.Flip(FlipType.Vertical);
- // break;
- // case 5:
- // image.RotateFlip(RotateType.Rotate270, FlipType.Horizontal);
- // break;
- // case 6:
- // image.Rotate(RotateType.Rotate90);
- // break;
- // case 7:
- // image.RotateFlip(RotateType.Rotate90, FlipType.Horizontal);
- // break;
- // case 8:
- // //image.Rotate(-90);
- // image.Rotate(RotateType.Rotate270);
-
- // image.MetaData.ExifProfile.SetValue(ExifTag.Orientation, new ExifValue(exif.GetValue(ExifTag.Orientation)).Value = (ushort)1);
- // break;
-
-
- // }
- // }
- //}
-
- }
-
- if (PicSettings.Instance.EnableText)
- {
- //SetTextTest(image);
- SetExtraText(image, isRotated);
-
-
- MaddoLogger.Log("Drawn text on Image: {0}", workFile.FullName);
- }
-
- //JpegDecoder j = new JpegDecoder();
- var va = Vector.IsHardwareAccelerated;
-
- MaddoLogger.Log("Hardware Accelerated: {0}", va);
- //image.Resize(PicSettings.Instance.FotoLarghezza, PicSettings.Instance.FotoAltezza);
-
- //image.Resize(2240, 2240);
- //var fff = FontCollection.SystemFonts.Find(PicSettings.Instance.NomeFont);
- //var font = new Font(fff, (float)PicSettings.Instance.DimensioneFont, FontStyle.Regular);
- //image.DrawText("sssssssssssssssssssssssssssssssssssssssssssssss", font, Color.Black, new Vector2(200, 200));
- image.Save(Path.Combine(PicSettings.Instance.DirectoryDestinazione, workFile.Name), new JpegEncoder() { Quality = PicSettings.Instance.CompressioneJpeg });
- //image.Resize(200, 200).Save("");
-
- MaddoLogger.Log("Saved Image: {0} to: {1}", workFile.FullName, Path.Combine(PicSettings.Instance.DirectoryDestinazione, workFile.Name));
- }
- s.Stop();
- MaddoLogger.Log("Time Taken for {0}: {1}", workFile.FullName, s.Elapsed);
- }
-
- private void Resize(Image image)
- {
- IResampler resampler;
- switch (PicSettings.Instance.ResizeMode)
- {
- case ResizeModes.Bicubic:
- resampler = new BicubicResampler();
- break;
- case ResizeModes.Box:
- resampler = new BoxResampler();
- break;
- case ResizeModes.CatmullRom:
- resampler = new CatmullRomResampler();
- break;
- case ResizeModes.Hermite:
- resampler = new HermiteResampler();
- break;
- case ResizeModes.Lanczos2:
- resampler = new Lanczos2Resampler();
- break;
- case ResizeModes.Lanczos3:
- resampler = new Lanczos3Resampler();
- break;
- case ResizeModes.Lanczos5:
- resampler = new Lanczos5Resampler();
- break;
- case ResizeModes.Lanczos8:
- resampler = new Lanczos8Resampler();
- break;
- case ResizeModes.MitchellNetravali:
- resampler = new MitchellNetravaliResampler();
- break;
- case ResizeModes.NearestNeighbor:
- resampler = new NearestNeighborResampler();
- break;
- case ResizeModes.Robidoux:
- resampler = new RobidouxResampler();
- break;
- case ResizeModes.Spline:
- resampler = new SplineResampler();
- break;
- case ResizeModes.Triangle:
- resampler = new TriangleResampler();
- break;
- case ResizeModes.Welch:
- resampler = new WelchResampler();
- break;
- default:
- throw new ArgumentOutOfRangeException();
- }
- // todo calcolare ridimensionamento
- var size = new Size(PicSettings.Instance.FotoLarghezza, PicSettings.Instance.FotoAltezza);
- if (PicSettings.Instance.FotoMantieniDimensioni)
- {
- size = ResizeImage(image, size, PicSettings.Instance.ResizeDimension);
- image.Mutate(x => x.Resize((size.Width), (size.Height), resampler));
-
- //Width Formula:
- //original height / original width * new width = new height
- //Height Formula:
- //orignal width / orignal height * new height = new width
- }
- else
- {
-
- image.Mutate(x => x.Resize(PicSettings.Instance.FotoAltezza, PicSettings.Instance.FotoLarghezza, resampler));
- }
-
- }
-
- private Size ResizeImage(Image image, Size size, ResizeDimensions side)
- {
- switch (side)
- {
- case ResizeDimensions.LatoLungo:
- size = GetResizeDimensions(new Size(image.Width, image.Height), size, image.Width > image.Height);
- break;
- case ResizeDimensions.LatoCorto:
- size = GetResizeDimensions(new Size(image.Width, image.Height), size, image.Width <= image.Height);
- break;
- default:
- throw new ArgumentOutOfRangeException();
- }
- return size;
- }
-
- private Size GetResizeDimensions(Size originalSize, Size newSize, bool adjustHeight)
- {
- return adjustHeight ? new Size(newSize.Width, originalSize.Height / originalSize.Width * newSize.Height) : new Size(originalSize.Width / originalSize.Height * newSize.Height, newSize.Height);
- }
-
- private void SetTextTest(Image image)
- {
- string text = "test test test test test testtest test test test test test test";
- Font font = new Font(SystemFonts.Find("verdana"), 300, FontStyle.Regular);
- image.Mutate(x => x.DrawText(text, font, Rgba32.Yellow, new PointF(2760, 3295.54932f), new TextGraphicsOptions()
- {
- HorizontalAlignment = HorizontalAlignment.Center
- }));
- }
-
- private void SetExtraText(Image image, bool isRotated)
- {
- if (string.IsNullOrWhiteSpace(PicSettings.Instance.TestoApplicareOrizzontale))
- {
- Debug.WriteLine($"{_currentFile.Name} No text");
- return;
- }
-
- string text;
- if (isRotated)
- {
- if (PicSettings.Instance.TestoApplicareOrizzontale.Contains("$_"))
- {
- text = PicSettings.Instance.TestoApplicareOrizzontale.Replace("$_", "\r\n");
- }
- else
- {
- text = PicSettings.Instance.TestoApplicareOrizzontale.Replace("$_", "");
- }
-
- }
- else
- {
- text = PicSettings.Instance.TestoApplicareOrizzontale.Replace("$_", "");
- }
-
-
- var fo = SixLabors.Fonts.SystemFonts.Find(PicSettings.Instance.NomeFont);
-
-
- //var fff = FontCollection.SystemFonts.Find(PicSettings.Instance.NomeFont);
- //var fff = FontCollection.SystemFonts.Find("Segoe Print");
-
- Font font;
-
- if (!PicSettings.Instance.Grassetto)
- {
- font = new Font(fo, (float)PicSettings.Instance.DimensioneFont, FontStyle.Regular);
- }
- else
- {
- font = new Font(fo, (float)PicSettings.Instance.DimensioneFont, FontStyle.Bold);
- }
- // todo corsivo
-
-
-
- //var font = new Font(fff, 8f, FontStyle.Regular);
-
-
- //Color c = Color.FromHex(FlipRgbString(PicSettings.Instance.ColoreTestoRGB));
- Rgba32 g = Rgba32.FromHex(FlipRgbString(PicSettings.Instance.ColoreTestoRGB));
-
- Rgba32 gBack = Rgba32.Black; // todo alpha
- //TextMeasurer measurer = new TextMeasurer();
-
- //var size = measurer.MeasureText(PicSettings.Instance.TestoApplicareOrizzontale, font, 72);
- //float scalingFactor = Math.Min(image.Width / size.Width, image.Height / size.Height);
- //Font scaledFont = new Font(font, scalingFactor * font.Size);
-
- //image.DrawText(PicSettings.Instance.TestoApplicareOrizzontale, scaledFont, g, new Vector2(0, 0));
-
- Vector2 center = new Vector2(image.Width / 2, image.Height / 2); //center horizontally, 10px down
-
- var size = TextMeasurer.Measure(text, new RendererOptions(font));
-
- var larghezzaStandard = size.Width;
- var dimensioneStandard = (int)Math.Round(PicSettings.Instance.DimensioneFont);
- if (size.Width > image.Width)
- {
- var c = dimensioneStandard;
- do
- {
- if (c > 20)
- {
- c -= 5;
- }
- else
- {
- c -= 1;
- }
-
- if (PicSettings.Instance.Grassetto)
- {
- font = new Font(fo, c, FontStyle.Bold);
- }
- else
- {
- font = new Font(fo, c, FontStyle.Regular);
- }
- size = TextMeasurer.Measure(text,
- new RendererOptions(font));
- if (size.Width < image.Width)
- {
- larghezzaStandard = (int)Math.Round(size.Width);
- break;
- }
- if (c <= 5)
- {
- break;
- }
- } while (dimensioneStandard == c);
- }
-
- float yPosFromBottom = 0;
-
- switch (PicSettings.Instance.TextPosition)
- {
- case Positions.Alto:
- yPosFromBottom = PicSettings.Instance.Margine;
- break;
- case Positions.Basso:
- yPosFromBottom = image.Height - size.Height - (image.Height * PicSettings.Instance.Margine / 100);
- break;
- }
-
- float xCenterofImg = 0;
-
- // stringformat
-
- switch (PicSettings.Instance.TextAlignment)
- {
- case Alignments.Sinistra:
- xCenterofImg = PicSettings.Instance.Margine + (larghezzaStandard / 2);
- if ((larghezzaStandard / 2) > (image.Width / 2) - PicSettings.Instance.Margine)
- {
- xCenterofImg = image.Width / 2;
- }
- break;
- case Alignments.Centro:
- xCenterofImg = image.Width / 2;
- break;
- case Alignments.Destra:
- xCenterofImg = image.Width - PicSettings.Instance.Margine - larghezzaStandard / 2;
-
- if (larghezzaStandard / 2 > image.Width / 2 - PicSettings.Instance.Margine)
- {
- xCenterofImg = image.Width / 2;
- }
-
- break;
- }
- // stringformat alignment center
-
- if (PicSettings.Instance.Grassetto)
- {
- font = new Font(fo, dimensioneStandard, FontStyle.Bold);
- }
- else
- {
- font = new Font(fo, dimensioneStandard, FontStyle.Regular);
- }
-
- image.Mutate(x => x.DrawText(text, font, gBack, new PointF((float)Math.Round(xCenterofImg + 1), (float)Math.Round(yPosFromBottom + 1)), new TextGraphicsOptions()
- {
- HorizontalAlignment = HorizontalAlignment.Center
- }));
-
- image.Mutate(x => x.DrawText(text, font, g, new PointF((float)Math.Round(xCenterofImg), (float)Math.Round(yPosFromBottom)), new TextGraphicsOptions()
- {
- HorizontalAlignment = HorizontalAlignment.Center
- }));
-
- return;
-
-
- float scalingFactor = Math.Min(image.Width / size.Width, image.Height / size.Height);
- Font scaledFont = new Font(font, scalingFactor * font.Size);
-
- image.Mutate(x =>
- x.DrawText(PicSettings.Instance.TestoApplicareOrizzontale, scaledFont, g, center,
- new TextGraphicsOptions(true)
- {
- HorizontalAlignment = HorizontalAlignment.Center,
- VerticalAlignment = VerticalAlignment.Bottom
- }));
- //image.DrawText(PicSettings.Instance.TestoApplicareOrizzontale, scaledFont, g, center, new TextGraphicsOptions(true) { HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Bottom });
-
-
- }
-
- private void AddLogo(Image image)
- {
- //if (string.IsNullOrWhiteSpace(PicSettings.Instance.LogoPath)) return;
- //if (!File.Exists(PicSettings.Instance.LogoPath)) return;
- //using (Image logo = Image.Load(PicSettings.Instance.LogoPath))
- //{
- // Size size = new Size();
- // Point location = new Point();
- // image.Mutate(x => x.DrawImage(logo, size, location, new GraphicsOptions()
- // {
-
- // }));
-
- //}
-
- Size size = new Size();
- Point location = new Point();
-
- if (_logo != null)
- {
- var width = PicSettings.Instance.LogoWidth;
- var height = PicSettings.Instance.LogoHeight;
- var heightFactor = _logo.Height / height;
- var widthFactor = _logo.Width / width;
- var newLogoSize = new Size();
-
- newLogoSize = GetResizeDimensions(new Size(_logo.Width, _logo.Height), new Size(width, height), PicSettings.Instance.LogoResizeSide.Equals(ResizeDimensions.LatoCorto));
- //todo riguardare perché non torna cosa ho fatto
-
- int margineUsato = 0;
- int margineL;
- bool inPercentualeL;
-
- inPercentualeL = PicSettings.Instance.LogoMargin.EndsWith("%");
- if (inPercentualeL)
- {
- margineL = int.Parse(PicSettings.Instance.LogoMargin.Replace("%", ""));
- }
- else
- {
- margineL = int.Parse(PicSettings.Instance.LogoMargin);
- }
-
- switch (PicSettings.Instance.LogoPosition)
- {
- case Positions.Alto:
- break;
- case Positions.Centro:
- break;
- case Positions.Basso:
- break;
- default:
- throw new ArgumentOutOfRangeException();
- }
-
- switch (PicSettings.Instance.LogoAlignment)
- {
- case Alignments.Sinistra:
- location.X = margineUsato;
- break;
- case Alignments.Centro:
- //location.X = image.Width -
- break;
- case Alignments.Destra:
- break;
- default:
- throw new ArgumentOutOfRangeException();
- }
- image.Mutate(x => x.DrawImage(_logo, size, location, new GraphicsOptions()));
-
-
-
-
- }
-
- }
-
- private void WriteTextFixed(Image image)
- {
- var fo = SixLabors.Fonts.SystemFonts.Find("Microsoft Sans Serif");
- var font = new Font(fo, 8, FontStyle.Regular);
- Rgba32 g = Rgba32.FromHex("#FF00FFFF");
- Vector2 center = new Vector2(image.Width / 2, image.Height / 2);
- var size = TextMeasurer.Measure("Test test test test test", new RendererOptions(font));
- float scalingFactor = Math.Min(image.Width / size.Width, image.Height / size.Height);
- Font scaledFont = new Font(font, scalingFactor * font.Size);
- image.Mutate(x => x.DrawText("Test test test test test", scaledFont, g, center, new TextGraphicsOptions(true) { HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Bottom }));
- }
-
- private string FlipRgbString(string originalString)
- {
- string s;
- if (originalString.Length == 7)
- {
- s = string.Concat("#", originalString.Substring(1, 6));
- }
- else
- {
- s = string.Concat("#", originalString.Substring(3, 6), originalString.Substring(1, 2));
- }
-
-
- return s;
- }
- }
-}
diff --git a/CatalogLib/PicSettings.cs b/CatalogLib/PicSettings.cs
deleted file mode 100644
index 795b004..0000000
--- a/CatalogLib/PicSettings.cs
+++ /dev/null
@@ -1,548 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Drawing;
-using System.IO;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using MaddoLibrary.Base.Log;
-using Newtonsoft.Json;
-
-namespace CatalogLib
-{
- public class PicSettings
- {
- private static PicSettings _instance = new PicSettings();
-
- public static PicSettings Instance
- {
- get { return _instance; }
- }
-
- private Dictionary _settingsDict = new Dictionary();
-
- public PicSettings()
- {
- SetDefaults();
- }
-
- public string SerializeSettings()
- {
- return JsonConvert.SerializeObject(_settingsDict);
- }
-
- public void DeserializeSettings(string serializedData)
- {
- _settingsDict = JsonConvert.DeserializeObject>(serializedData);
-
-
- }
-
- public void SetBase(string key, object value)
- {
- if (_settingsDict.ContainsKey(key))
- {
- _settingsDict[key] = value;
- }
- else
- {
- _settingsDict.Add(key, value);
- }
- }
-
- public void SetString(string key, string value)
- {
- SetBase(key, value);
- }
-
- public void SetInt(string key, int value)
- {
- SetBase(key, value);
- }
-
- public void SetBool(string key, bool value)
- {
- SetBase(key, value);
- }
-
- public void SetDouble(string key, double value)
- {
- SetBase(key, value);
- }
-
- public void SetFloat(string key, float value)
- {
- SetBase(key, value);
- }
-
- public void Set(string key, T value)
- {
- SetBase(key, value);
- }
-
- public bool Exists(string key)
- {
- return _settingsDict.ContainsKey(key);
- }
-
- public int GetInt(string key, int defaultValue = 0)
- {
- if (!_settingsDict.ContainsKey(key))
- {
- SetInt(key, defaultValue);
- }
-
- if (_settingsDict[key] is int) return (int)_settingsDict[key];
- Debug.WriteLine($"Error while parsing {key}");
- //return defaultValue;
-
- int r;
-
- if (int.TryParse(_settingsDict[key].ToString(), out r))
- {
- SetInt(key, r);
-
- }
- else
- {
- SetInt(key, defaultValue);
- }
- return (int)_settingsDict[key];
- //return (int) _settingsDict[key];
-
- //return _settingsDict.ContainsKey(key) ? (int)_settingsDict[key] : defaultValue;
- }
-
- public double GetDouble(string key, double defaultValue = 0)
- {
- if (!_settingsDict.ContainsKey(key))
- {
- SetDouble(key, defaultValue);
- // setdouble default
- }
-
- if (_settingsDict[key] is double) return (double)_settingsDict[key];
- Debug.WriteLine($"Error while parsing {key}");
-
- double d;
- if (double.TryParse(_settingsDict[key].ToString(), out d))
- {
- SetDouble(key, d);
- // setdouble key r
- }
- else
- {
- SetDouble(key, defaultValue);
- //setdouble defaultvalue
- }
- return (double)_settingsDict[key];
- }
-
- public float GetFloat(string key, float defaultValue = 0)
- {
- if (!_settingsDict.ContainsKey(key))
- {
- SetFloat(key, defaultValue);
- }
-
- if (_settingsDict[key] is float f) return f;
- MaddoLogger.LogError("Error while parsing {0}", key);
-
- float fl = 0;
- SetFloat(key, float.TryParse(_settingsDict[key].ToString(), out f) ? fl : defaultValue);
- return (float)_settingsDict[key];
- }
-
-
-
- public T Get(string key, T defaultValue)
- {
- if (!_settingsDict.ContainsKey(key))
- {
- Set(key, defaultValue);
- // setdouble default
- }
-
- return (T)_settingsDict[key];
- }
-
-
-
-
- public string GetString(string key, string defaultValue = "")
- {
- if (!_settingsDict.ContainsKey(key))
- {
- SetString(key, defaultValue);
- }
- return (string)_settingsDict[key];
-
- //return _settingsDict.ContainsKey(key) ? (string)_settingsDict[key] : defaultValue;
- }
-
- public bool GetBool(string key, bool defaultValue = false)
- {
- if (!_settingsDict.ContainsKey(key))
- {
- SetBool(key, defaultValue);
- return defaultValue;
- }
- return (bool)_settingsDict[key];
-
-
-
- //return _settingsDict.ContainsKey(key) && (bool)_settingsDict[key];
- }
-
-
- public object GetObject(string key, object defaultValue = null)
- {
- if (!_settingsDict.ContainsKey(key))
- {
- Set(key, defaultValue);
- return defaultValue;
- }
- return _settingsDict[key];
-
- //return _settingsDict.ContainsKey(key) ? _settingsDict[key] : defaultValue;
- }
-
- public T GetEnum(string name, T defaultValue)
- {
- return (T)Enum.Parse(typeof(T), GetString(name, defaultValue.ToString()));
- }
-
- public void SetDefaults()
- {
-
- }
-
- public bool DirAggiornaSottoDirectory
- {
- get => this.GetBool("DirAggiornaSottoDirectory", true);
- set => this.SetBool("DirAggiornaSottoDirectory", value);
- }
-
- 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 DateTime DataPartenza { get; set; }
- public string TestoOrario { get; internal set; }
- public int DimStandard { get; internal set; }
- public int DimStandardMiniatura { get; internal set; }
- public bool UsaOrarioTestoApplicare { get; set; }
- public bool UsaOrarioMiniatura { get; set; }
- public string TestoFirmaStart { get; set; }
- public string TestoFirmaStartV { get; set; }
- public bool UsaForzaJpg { get; set; }
-
- public string DirectorySorgente
- {
- get { return GetString("DirSorgente"); }
- set { SetString("DirSorgente", value); }
- }
-
- public string DirectoryDestinazione
- {
- get { return GetString("DirDestinazione"); }
- set { SetString("DirDestinazione", value); }
- }
-
- public int Margine
- {
- get => GetInt("Margin", 1);
- set => SetInt("Margin", value);
- }
- public float MargVert { get; set; }
- public string Allineamento { get; set; }
-
- public bool GeneraleForzaJPG
- {
- get { return GetBool("GeneraleForzaJPG", true); }
- set { SetBool("GeneraleForzaJPG", value); }
- }
-
- public bool GeneraleRotazioneAutomatica
- {
- get { return GetBool("GeneraleRotazioneAutomatica", true); }
- set { SetBool("GeneraleRotazioneAutomatica", value); }
- }
-
- public bool GeneraleSovrascriviFile
- {
- get { return GetBool("GeneraleSovrascriviFile"); }
- set { SetBool("GeneraleSovrascriviFile", value); }
- }
-
- public bool SubdirCreaSottoCartelle
- {
- get { return GetBool("SubdirCreaSottoCartelle"); }
- set { SetBool("SubdirCreaSottoCartelle", value); }
- }
-
- public int SubdirIntervalloFile
- {
- get { return GetInt("SubdirIntervalloFile", 99); }
- set { SetInt("SubdirIntervalloFile", value); }
- }
-
- public string SubdirSuffisso
- {
- get { return GetString("SubdirSuffisso"); }
- set { SetString("SubdirSuffisso", value); }
- }
-
- public int SubdirCifreContatore
- {
- get { return GetInt("SubdirCifreContatore", 2); }
- set { SetInt("SubdirCifreContatore", value); }
- }
-
- public bool SubdirNumerazioneProgressiva
- {
- get { return GetBool("SubdirNumerazioneProgressiva", true); }
- set { SetBool("SubdirNumerazioneProgressiva", value); }
- }
-
- public bool SubdirNumerazioneFiles
- {
- get { return GetBool("SubdirNumerazioneFiles", false); }
- set { SetBool("SubdirNumerazioneFiles", value); }
- }
-
- public int FotoAltezza
- {
- get { return GetInt("FotoAltezza", 2240); }
- set { SetInt("FotoAltezza", value); }
- }
-
- public int FotoLarghezza
- {
- get { return GetInt("FotoLarghezza", 2240); }
- set { SetInt("FotoLarghezza", value); }
- }
-
- public int CompressioneJpeg
- {
- get { return GetInt("CompressioneJpeg", 85); }
- set { SetInt("CompressioneJpeg", value); }
- }
-
- public bool FotoMantieniDimensioni
- {
- get { return GetBool("FotoMantieniDimensioni", true); }
- set { SetBool("FotoMantieniDimensioni", value); }
- }
-
- public string FotoSuffisso
- {
- get { return GetString("FotoSuffisso"); }
- set { SetString("FotoSuffisso", value); }
- }
-
-
- public bool EnableThumbnails
- {
- get { return GetBool("EnableThumbnails", false); }
- set { SetBool("EnableThumbnails", value); }
- }
- public bool EnableLogo
- {
- get { return GetBool("EnableLogo", false); }
- set { SetBool("EnableLogo", value); }
- }
-
- #region Text
-
- public bool EnableText
- {
- get { return GetBool("EnableText", false); }
- set { SetBool("EnableText", value); }
- }
-
- public string NomeFont
- {
- get { return GetString("nomeFont", "Verdana"); }
- set { SetString("nomeFont", value); }
- }
-
- public double DimensioneFont
- {
- get { return Get("dimensioneFont", 1); }
- set { SetDouble("dimensioneFont", value); }
- }
-
- public string TestoApplicareOrizzontale
- {
- get
- {
- return Get("TestoApplicareOrizzontale", "");
- }
- set
- {
- Set("TestoApplicareOrizzontale", value);
- }
- }
-
- public string ColoreTestoRGB
- {
- get { return GetString("coloreTestoRGB", "#000000"); }
- set
- {
- Set("coloreTestoRGB", value);
-
- }
- }
-
- public bool FotoRidimensiona
- {
- get => GetBool("FotoRidimensiona", false);
- set => Set("FotoRidimensiona", value);
- }
-
- public Positions TextPosition
- {
- get => GetEnum("TextPosition", Positions.Alto); //(Positions)Enum.Parse(typeof(Positions), GetString("TextPosition", Positions.Alto.ToString()));
- set => SetString("TextPosition", value.ToString());
- }
-
- public Alignments TextAlignment
- {
- get => GetEnum("TextAlignment", Alignments.Centro);
- set => SetString("TextAlignment", value.ToString());
- }
-
- public bool Threading
- {
- get => GetBool("Threading", true);
- set => SetBool("Threading", value);
- }
-
- public ResizeModes ResizeMode
- {
- get => GetEnum("ResizeMode", ResizeModes.Bicubic);
- set => SetString("ResizeMode", value.ToString());
- }
-
- public ResizeDimensions ResizeDimension
- {
- get => GetEnum("ResizeDimension", CatalogLib.ResizeDimensions.LatoCorto);
- set => SetString("ResizeDimension", value.ToString());
- }
-
- public string LogoPath
- {
- get => GetString("LogoPath");
- set => SetString("LogoPath", value);
- }
-
- public int LogoWidth
- {
- get => GetInt("LogoWidth");
- set => SetInt("LogoWidth", value);
- }
-
- public int LogoHeight
- {
- get => GetInt("LogoHeight");
- set => SetInt("LogoHeight", value);
- }
-
- public string LogoMargin
- {
- get => GetString("LogoMargin");
- set => SetString("LogoMargin", value);
- }
-
- public Positions LogoPosition
- {
- get => GetEnum("LogoPositions", Positions.Alto);
- set => SetString("LogoPositions", value.ToString());
- }
-
- public Alignments LogoAlignment
- {
- get => GetEnum("LogoAlignments", Alignments.Centro);
- set => SetString("LogoAlignments", value.ToString());
- }
-
- public ResizeDimensions LogoResizeSide
- {
- get => GetEnum("LogoResizeMode", ResizeDimensions.LatoCorto);
- set => SetString("LogoResizeMode", value.ToString());
- }
-
- #endregion
-
- #region Enums
-
-
-
- #endregion
- }
-}
\ No newline at end of file
diff --git a/CatalogLib/Properties/AssemblyInfo.cs b/CatalogLib/Properties/AssemblyInfo.cs
deleted file mode 100644
index 9d7f332..0000000
--- a/CatalogLib/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-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/CatalogLib/SinglePicData.cs b/CatalogLib/SinglePicData.cs
deleted file mode 100644
index fb392c5..0000000
--- a/CatalogLib/SinglePicData.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace CatalogLib
-{
- public enum Rotazione
- {
- Normale,
- Destra,
- Sinistra,
- Sottosopra
- }
-
- public class SinglePicData
- {
-
-
- }
-}
diff --git a/CatalogLib/app.config b/CatalogLib/app.config
deleted file mode 100644
index f007515..0000000
--- a/CatalogLib/app.config
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/CatalogLib/packages.config b/CatalogLib/packages.config
deleted file mode 100644
index 86dfa50..0000000
--- a/CatalogLib/packages.config
+++ /dev/null
@@ -1,63 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/CatalogLib/stylecop.json b/CatalogLib/stylecop.json
deleted file mode 100644
index c67c0db..0000000
--- a/CatalogLib/stylecop.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "$schema": "https://raw.githubusercontent.com/DotNetAnalyzers/StyleCopAnalyzers/master/StyleCop.Analyzers/StyleCop.Analyzers/Settings/stylecop.schema.json",
- "settings":
- {
- "orderingRules":
- {
- "usingDirectivesPlacement": "outsideNamespace"
- },
- "documentationRules":
- {
- "xmlHeader": false,
- "copyrightText": "Copyright (c) Six Labors and contributors.\nLicensed under the Apache License, Version 2.0."
- }
- }
-}
\ No newline at end of file
diff --git a/CatalogLibVb/CatalogLibVb.csproj b/CatalogLibVb/CatalogLibVb.csproj
deleted file mode 100644
index 8d292d6..0000000
--- a/CatalogLibVb/CatalogLibVb.csproj
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
-
-
- 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
deleted file mode 100644
index 16254ce..0000000
--- a/CatalogLibVb/Class1.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-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
deleted file mode 100644
index 0ec915f..0000000
--- a/CatalogLibVb/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-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/CatalogLite/App.axaml b/CatalogLite/App.axaml
new file mode 100644
index 0000000..7b4ec8a
--- /dev/null
+++ b/CatalogLite/App.axaml
@@ -0,0 +1,41 @@
+
+
+
+
+
+ #F4F6F8
+ #FFFFFF
+ #D4DAE2
+ #1F7A5A
+
+
+ #20242A
+ #2A3038
+ #46505C
+ #4FB286
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/CatalogLite/App.axaml.cs b/CatalogLite/App.axaml.cs
new file mode 100644
index 0000000..64f294b
--- /dev/null
+++ b/CatalogLite/App.axaml.cs
@@ -0,0 +1,29 @@
+using Avalonia.Controls.ApplicationLifetimes;
+using Avalonia.Markup.Xaml;
+using Microsoft.Extensions.DependencyInjection;
+
+namespace CatalogLite;
+
+public partial class App : Avalonia.Application
+{
+ public override void Initialize() => AvaloniaXamlLoader.Load(this);
+
+ public override void OnFrameworkInitializationCompleted()
+ {
+ if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
+ {
+ if (ExpirationGuard.IsExpired(out var expirationDate))
+ {
+ var expiredWindow = new ExpiredWindow(expirationDate);
+ expiredWindow.Closed += (_, _) => desktop.Shutdown();
+ desktop.MainWindow = expiredWindow;
+ }
+ else
+ {
+ desktop.MainWindow = Program.ServiceProvider.GetRequiredService();
+ }
+ }
+
+ base.OnFrameworkInitializationCompleted();
+ }
+}
\ No newline at end of file
diff --git a/CatalogLite/Assets/Config.xml b/CatalogLite/Assets/Config.xml
new file mode 100644
index 0000000..9b0fa7d
--- /dev/null
+++ b/CatalogLite/Assets/Config.xml
@@ -0,0 +1,227 @@
+
+
+
+ MiniatureModalita
+ Text
+
+
+ DirSorgente
+
+
+
+ DirDestinazione
+
+
+
+ MiniatureCrea
+ True
+
+
+ MiniatureSuffisso
+ tn_
+
+
+ MiniatureAltezza
+ 350
+
+
+ MiniatureLarghezza
+ 350
+
+
+ FontDimensioneMiniatura
+ 20
+
+
+ CompressioneJpegMiniatura
+ 60
+
+
+ MiniatureAddOrario
+ False
+
+
+ NomeMiniatura
+ False
+
+
+ MiniatureAddScritta
+ True
+
+
+ TempoSmall
+ False
+
+
+ NumTempoSmall
+ False
+
+
+ FotoCodice
+
+
+
+ FotoAltezza
+ 2560
+
+
+ FotoLarghezza
+ 2560
+
+
+ FotoDimOriginali
+ False
+
+
+ CompressioneJpeg
+ 90
+
+
+ FontDimensione
+ 50
+
+
+ FontNome
+ Verdana
+
+
+ FontBold
+ True
+
+
+ ColoreTestoRGB
+ #FA7B0A
+
+
+ TestoTesto
+
+
+
+ TestoVerticale
+
+
+
+ TestoTrasparente
+ 0
+
+
+ TestoMargine
+ 8
+
+
+ TestoPosizione
+ Basso
+
+
+ TestoAllineamento
+ Centro
+
+
+ GrandezzaVerticale
+ 18
+
+
+ MargineVerticale
+ 6
+
+
+ MarchioAltezza
+ 250
+
+
+ MarchioLarghezza
+ 250
+
+
+ MarchioMargine
+ 130
+
+
+ MarchioAllOrizzontale
+ Destra
+
+
+ MarchioAllVerticale
+ Alto
+
+
+ MarchioTrasparenza
+ 100
+
+
+ MarchioAggiungi
+ True
+
+
+ ColoreTrasparente
+ #FFFFFF
+
+
+ UsaColoreTrasparente
+ True
+
+
+ ImageLibrary
+ ImageSharp
+
+
+ GeneraleForzaJpg
+ True
+
+
+ GeneraleRotazioneAutomatica
+ True
+
+
+ DirSottoDirectory
+ True
+
+
+ TempoGara
+ False
+
+
+ Orario
+ False
+
+
+ EtichettaOrario
+
+
+
+ DataFoto
+ False
+
+
+ NumeroFoto
+ False
+
+
+ GeneraleSovrascriviFile
+ False
+
+
+ DirDividiNumFile
+ 300
+
+
+ DirDividiSuffisso
+
+
+
+ DirDividiNumCifre
+ 2
+
+
+ ChunkSize
+ 0
+
+
+ ThreadsCount
+ 0
+
+
+ DataPartenza
+ 17/02/2026 09:35:25
+
+
\ No newline at end of file
diff --git a/CatalogLite/Assets/Logo_RUS_ETS_tricolore_OK.png b/CatalogLite/Assets/Logo_RUS_ETS_tricolore_OK.png
new file mode 100644
index 0000000..1d4d8bf
Binary files /dev/null and b/CatalogLite/Assets/Logo_RUS_ETS_tricolore_OK.png differ
diff --git a/CatalogLite/Assets/testConfig.xml b/CatalogLite/Assets/testConfig.xml
new file mode 100644
index 0000000..cf735d0
--- /dev/null
+++ b/CatalogLite/Assets/testConfig.xml
@@ -0,0 +1,336 @@
+
+
+
+ MiniatureModalita
+ RaceTime
+
+
+ MiniatureCrea
+ True
+
+
+ MiniatureSuffisso
+ tn_
+
+
+ MiniatureAltezza
+ 350
+
+
+ MiniatureLarghezza
+ 350
+
+
+ FontDimensioneMiniatura
+ 48
+
+
+ CompressioneJpegMiniatura
+ 25
+
+
+ MiniatureAddOrario
+ False
+
+
+ NomeMiniatura
+ False
+
+
+ MiniatureAddScritta
+ False
+
+
+ TempoSmall
+ True
+
+
+ NumTempoSmall
+ False
+
+
+ FotoCodice
+
+
+
+ FotoAltezza
+ 2560
+
+
+ FotoLarghezza
+ 2560
+
+
+ FotoDimOriginali
+ False
+
+
+ CompressioneJpeg
+ 90
+
+
+ FontDimensione
+ 22
+
+
+ FontNome
+ Verdana
+
+
+ FontBold
+ True
+
+
+ ColoreTestoRGB
+ #FEC005
+
+
+ TestoTesto
+ MARATONINA DI VINCI -1 FEBBRAIO 2026
+
+
+ TestoVerticale
+ MARATONINA DI VINCI
+1 FEBBRAIO 2026
+
+
+ TestoTrasparente
+ 0
+
+
+ TestoMargine
+ 8
+
+
+ TestoPosizione
+ Basso
+
+
+ TestoAllineamento
+ Centro
+
+
+ GrandezzaVerticale
+ 18
+
+
+ MargineVerticale
+ 6
+
+
+ MarchioFile
+ K:\various\catalogtest\Logo.jpg
+
+
+ MarchioAltezza
+ 470
+
+
+ MarchioLarghezza
+ 470
+
+
+ MarchioMargine
+ 350
+
+
+ MarchioAllOrizzontale
+ Destra
+
+
+ MarchioAllVerticale
+ Alto
+
+
+ MarchioTrasparenza
+ 100
+
+
+ MarchioAggiungi
+ True
+
+
+ ColoreTrasparente
+ #FFFFFF
+
+
+ UsaColoreTrasparente
+ True
+
+
+ ImageLibrary
+ System.Graphics
+
+
+ GeneraleForzaJpg
+ True
+
+
+ GeneraleRotazioneAutomatica
+ True
+
+
+ DirSottoDirectory
+ True
+
+
+ TempoGara
+ True
+
+
+ Orario
+ False
+
+
+ EtichettaOrario
+ TEMPO :
+
+
+ DataFoto
+ False
+
+
+ NumeroFoto
+ False
+
+
+ GeneraleSovrascriviFile
+ True
+
+
+ DirDividiNumFile
+ 300
+
+
+ DirDividiSuffisso
+
+
+
+ DirDividiNumCifre
+ 2
+
+
+ ChunkSize
+ 200
+
+
+ ThreadsCount
+ 10
+
+
+ DataPartenza
+ 01/02/2026 20:30:48
+
+
+ AI_EstraiNumeri
+ True
+
+
+ AI_CartellaModelli
+ K:\vs\AIFotoONLUS\models\\
+
+
+ AI_PercorsoCsv
+ K:\various\catalogtest\aioutput\test2.csv
+
+
+ AI_UsaGpuNumeri
+ True
+
+
+ AI_IncludiThumbnailNumeri
+ False
+
+
+ AI_LivelloCaricoNumeri
+ 3
+
+
+ AI_FaceExecutablePath
+ K:\various\regalamiunsorriso\bin\Face_Recognition_Windows\
+
+
+ AI_FaceOutputFolderPath
+ K:\various\catalogtest\aioutput\
+
+
+ AI_FaceRecursive
+ True
+
+
+ AI_FaceIncludeThumbnails
+ False
+
+
+ AI_FaceParallelism
+ 3
+
+
+ AI_FaceMinSize
+ 35
+
+
+ AI_FaceUpsample
+ False
+
+
+ AI_FaceMatcherExecutablePath
+ K:\various\regalamiunsorriso\bin\Face_Recognition_Windows\face_matcher.exe
+
+
+ AI_FaceMatcherTolerance
+ 0,75
+
+
+ RaceUpload_Login
+
+
+
+ RaceUpload_Password
+
+
+
+ RaceUpload_Description
+
+
+
+ RaceUpload_TipoGaraId
+ 1
+
+
+ RaceUpload_StartDate
+ 12/03/2026 00:00:00
+
+
+ RaceUpload_EndDate
+ 12/03/2026 00:00:00
+
+
+ RaceUpload_PathBase
+
+
+
+ RaceUpload_Localita
+
+
+
+ RaceUpload_EventoInLinea
+ 0
+
+
+ RaceUpload_TipoIndex
+ 1
+
+
+ RaceUpload_FreeEvent
+ 0
+
+
+ RaceUpload_LastRaceId
+
+
+
+ RaceUpload_RemoteProcessedBasePath
+
+
+
\ No newline at end of file
diff --git a/CatalogLite/AsyncCommand.cs b/CatalogLite/AsyncCommand.cs
new file mode 100644
index 0000000..d030d67
--- /dev/null
+++ b/CatalogLite/AsyncCommand.cs
@@ -0,0 +1,52 @@
+using Avalonia.Threading;
+using System.Windows.Input;
+
+namespace CatalogLite;
+
+public sealed class AsyncCommand : ICommand
+{
+ private readonly Func _execute;
+ private readonly Func? _canExecute;
+ private bool _isExecuting;
+
+ public AsyncCommand(Func execute, Func? canExecute = null)
+ {
+ _execute = execute ?? throw new ArgumentNullException(nameof(execute));
+ _canExecute = canExecute;
+ }
+
+ public event EventHandler? CanExecuteChanged;
+
+ public bool CanExecute(object? parameter) => !_isExecuting && (_canExecute?.Invoke() ?? true);
+
+ public async void Execute(object? parameter)
+ {
+ if (!CanExecute(parameter))
+ {
+ return;
+ }
+
+ try
+ {
+ _isExecuting = true;
+ RaiseCanExecuteChanged();
+ await _execute().ConfigureAwait(false);
+ }
+ finally
+ {
+ _isExecuting = false;
+ RaiseCanExecuteChanged();
+ }
+ }
+
+ public void RaiseCanExecuteChanged()
+ {
+ if (Dispatcher.UIThread.CheckAccess())
+ {
+ CanExecuteChanged?.Invoke(this, EventArgs.Empty);
+ return;
+ }
+
+ Dispatcher.UIThread.Post(() => CanExecuteChanged?.Invoke(this, EventArgs.Empty));
+ }
+}
\ No newline at end of file
diff --git a/CatalogLite/CatalogConfigurationLoader.cs b/CatalogLite/CatalogConfigurationLoader.cs
new file mode 100644
index 0000000..a4e4a02
--- /dev/null
+++ b/CatalogLite/CatalogConfigurationLoader.cs
@@ -0,0 +1,321 @@
+using System.Globalization;
+using System.Reflection;
+using System.Xml.Linq;
+using MaddoShared;
+using SixLabors.ImageSharp;
+using SixLabors.ImageSharp.PixelFormats;
+
+namespace CatalogLite;
+
+public sealed class CatalogConfigurationLoader
+{
+ private const string EmbeddedConfigResourceName = "CatalogLite.Assets.Config.xml";
+ private const string EmbeddedLogoResourceName = "CatalogLite.Assets.Logo_RUS_ETS_tricolore_OK.png";
+
+ public CatalogLiteConfiguration Load(string filePath, PicSettings picSettings)
+ {
+ if (string.IsNullOrWhiteSpace(filePath))
+ {
+ throw new ArgumentException("Percorso configurazione non valido.", nameof(filePath));
+ }
+
+ if (!File.Exists(filePath))
+ {
+ throw new FileNotFoundException("File configurazione non trovato.", filePath);
+ }
+
+ var values = ConfigurationValues.Load(filePath);
+ ApplyPicSettings(values, picSettings);
+
+ var sourcePath = LiteCatalogViewModel.NormalizeDirectoryPath(values.GetString("DirSorgente"));
+ var destinationPath = LiteCatalogViewModel.NormalizeDirectoryPath(values.GetString("DirDestinazione"));
+
+ picSettings.DirectorySorgente = sourcePath;
+ picSettings.DirectoryDestinazione = destinationPath;
+ picSettings.DestDir = string.IsNullOrWhiteSpace(destinationPath)
+ ? new DirectoryInfo(Environment.CurrentDirectory)
+ : new DirectoryInfo(destinationPath);
+
+ return new CatalogLiteConfiguration
+ {
+ FilePath = filePath,
+ SourcePath = sourcePath,
+ DestinationPath = destinationPath,
+ Options = BuildOptions(values, sourcePath, destinationPath)
+ };
+ }
+
+ public CatalogLiteConfiguration LoadEmbedded(PicSettings picSettings)
+ {
+ using var configStream = OpenEmbeddedResource(EmbeddedConfigResourceName);
+ var values = ConfigurationValues.Load(configStream);
+ ApplyPicSettings(values, picSettings);
+ picSettings.LogoData = ReadAllBytes(OpenEmbeddedResource(EmbeddedLogoResourceName));
+ picSettings.LogoNomeFile = string.Empty;
+
+ var sourcePath = LiteCatalogViewModel.NormalizeDirectoryPath(values.GetString("DirSorgente"));
+ var destinationPath = LiteCatalogViewModel.NormalizeDirectoryPath(values.GetString("DirDestinazione"));
+
+ picSettings.DirectorySorgente = sourcePath;
+ picSettings.DirectoryDestinazione = destinationPath;
+ picSettings.DestDir = string.IsNullOrWhiteSpace(destinationPath)
+ ? new DirectoryInfo(Environment.CurrentDirectory)
+ : new DirectoryInfo(destinationPath);
+
+ return new CatalogLiteConfiguration
+ {
+ FilePath = "Configurazione incorporata",
+ SourcePath = sourcePath,
+ DestinationPath = destinationPath,
+ Options = BuildOptions(values, sourcePath, destinationPath)
+ };
+ }
+
+ public static ImageCreationService.Options CloneOptions(ImageCreationService.Options options, string sourcePath, string destinationPath)
+ {
+ return new ImageCreationService.Options
+ {
+ AggiornaSottodirectory = options.AggiornaSottodirectory,
+ CreaSottocartelle = options.CreaSottocartelle,
+ FilePerCartella = options.FilePerCartella,
+ SuffissoCartelle = options.SuffissoCartelle,
+ CifreContatore = options.CifreContatore,
+ NumerazioneType = options.NumerazioneType,
+ SourcePath = sourcePath,
+ DestinationPath = destinationPath,
+ MaxThreads = Math.Max(1, options.MaxThreads),
+ ChunksSize = options.ChunksSize,
+ LinearExecution = options.LinearExecution
+ };
+ }
+
+ private static void ApplyPicSettings(ConfigurationValues values, PicSettings settings)
+ {
+ settings.DirectorySorgente = values.GetString("DirSorgente");
+ settings.DirectoryDestinazione = values.GetString("DirDestinazione");
+ settings.TestoFirmaStart = values.GetString("TestoTesto");
+ settings.TestoFirmaStartV = values.GetString("TestoVerticale");
+ settings.DataPartenza = values.GetDateTime("DataPartenza", DateTime.Now);
+ settings.TestoOrario = values.GetString("EtichettaOrario");
+ settings.DimStandard = values.GetInt("FontDimensione", 20);
+ settings.DimStandardMiniatura = values.GetInt("FontDimensioneMiniatura", 50);
+ settings.NomeData = values.GetBool("DataFoto");
+ settings.TestoNome = values.GetBool("NumeroFoto");
+ settings.UsaOrarioMiniatura = IsThumbnailMode(values, "Time") || values.GetBool("MiniatureAddOrario");
+ settings.UsaOrarioTestoApplicare = values.GetBool("Orario");
+ settings.UsaTempoGaraTestoApplicare = values.GetBool("TempoGara");
+ settings.UsaRotazioneAutomatica = values.GetBool("GeneraleRotazioneAutomatica");
+ settings.UsaForzaJpg = values.GetBool("GeneraleForzaJpg");
+ settings.LarghezzaSmall = values.GetInt("MiniatureLarghezza", 350);
+ settings.AltezzaSmall = values.GetInt("MiniatureAltezza", 350);
+ settings.CreaMiniature = values.GetBool("MiniatureCrea", true);
+ settings.AggiungiScritteMiniature = IsThumbnailMode(values, "Text") || values.GetBool("MiniatureAddScritta");
+ settings.Suffisso = values.GetString("MiniatureSuffisso", "tn_");
+ settings.Codice = values.GetString("FotoCodice");
+ settings.Trasparenza = values.GetInt("TestoTrasparente", 0);
+ settings.IlFont = values.GetString("FontNome", "Arial");
+ settings.Grassetto = values.GetBool("FontBold");
+ settings.Posizione = values.GetString("TestoPosizione", "Basso");
+ settings.Allineamento = values.GetString("TestoAllineamento", "Centro");
+ settings.Margine = values.GetInt("TestoMargine", 8);
+ settings.LogoAltezza = values.GetInt("MarchioAltezza", 430);
+ settings.LogoLarghezza = values.GetInt("MarchioLarghezza", 430);
+ settings.FontColoreRGB = ParseColor(values.GetString("ColoreTestoRGB", "Yellow"), new Rgba32(255, 255, 0, 255));
+ settings.LogoAggiungi = values.GetBool("MarchioAggiungi");
+ settings.LogoNomeFile = values.GetString("MarchioFile");
+ settings.LogoTrasparenza = values.GetInt("MarchioTrasparenza", 100).ToString(CultureInfo.InvariantCulture);
+ settings.LogoMargine = values.GetString("MarchioMargine", "0");
+ settings.LogoPosizioneH = values.GetString("MarchioAllOrizzontale", "Destra");
+ settings.LogoPosizioneV = values.GetString("MarchioAllVerticale", "Basso");
+ settings.TransparentColor = values.GetString("ColoreTrasparente", "#FFFFFF");
+ settings.UseTransparentColor = values.GetBool("UsaColoreTrasparente");
+ settings.FotoGrandeDimOrigina = values.GetBool("FotoDimOriginali");
+ settings.AltezzaBig = values.GetInt("FotoAltezza", 2240);
+ settings.LarghezzaBig = values.GetInt("FotoLarghezza", 2240);
+ settings.DimVert = values.GetInt("GrandezzaVerticale", 20);
+ settings.MargVert = values.GetInt("MargineVerticale", 6);
+ settings.TestoMin = IsThumbnailMode(values, "FileName") || values.GetBool("NomeMiniatura");
+ settings.DimMin = values.GetInt("FontDimensioneMiniatura", 50);
+ settings.SecretDefault = false;
+ settings.SecretBig = false;
+ settings.SecretSmall = false;
+ settings.SecretPathSmall = string.Empty;
+ settings.SecretPathBig = string.Empty;
+ settings.AggTempoGaraMin = IsThumbnailMode(values, "RaceTime") || values.GetBool("TempoSmall");
+ settings.AggNumTempMin = IsThumbnailMode(values, "FileNameAndTime") || values.GetBool("NumTempoSmall");
+ settings.JpegQuality = values.GetLong("CompressioneJpeg", 85);
+ settings.JpegQualityMin = values.GetLong("CompressioneJpegMiniatura", 30);
+ settings.FotoRuotaADestra = false;
+ settings.FotoRuotaASinistra = false;
+ settings.TempMinText = string.Empty;
+ settings.OverwriteFiles = values.GetBool("GeneraleSovrascriviFile");
+ }
+
+ private static ImageCreationService.Options BuildOptions(ConfigurationValues values, string sourcePath, string destinationPath)
+ {
+ var threads = values.GetInt("ThreadsCount", Environment.ProcessorCount);
+ if (threads <= 0)
+ {
+ threads = Environment.ProcessorCount;
+ }
+
+ return new ImageCreationService.Options
+ {
+ AggiornaSottodirectory = values.GetBool("DirSottoDirectory"),
+ CreaSottocartelle = values.GetBool("DirCreaSottocartelle", values.GetBool("CreateSubfolders")),
+ FilePerCartella = Math.Max(1, values.GetInt("DirDividiNumFile", 99)),
+ SuffissoCartelle = values.GetString("DirDividiSuffisso"),
+ CifreContatore = Math.Max(1, values.GetInt("DirDividiNumCifre", 2)),
+ NumerazioneType = values.GetBool("DirNumerazioneProgressiva", true) ? NumerazioneType.Progressiva : NumerazioneType.Files,
+ SourcePath = sourcePath,
+ DestinationPath = destinationPath,
+ MaxThreads = Math.Max(1, threads),
+ ChunksSize = Math.Max(0, values.GetInt("ChunkSize", 0)),
+ LinearExecution = values.GetBool("UseSequentialProcessing")
+ };
+ }
+
+ private static bool IsThumbnailMode(ConfigurationValues values, string mode)
+ {
+ return string.Equals(values.GetString("MiniatureModalita"), mode, StringComparison.OrdinalIgnoreCase);
+ }
+
+ private static Stream OpenEmbeddedResource(string resourceName)
+ {
+ var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName);
+ return stream ?? throw new InvalidOperationException($"Risorsa incorporata non trovata: {resourceName}");
+ }
+
+ private static byte[] ReadAllBytes(Stream stream)
+ {
+ using (stream)
+ {
+ using var memoryStream = new MemoryStream();
+ stream.CopyTo(memoryStream);
+ return memoryStream.ToArray();
+ }
+ }
+
+ private static Rgba32 ParseColor(string value, Rgba32 fallback)
+ {
+ if (string.IsNullOrWhiteSpace(value))
+ {
+ return fallback;
+ }
+
+ var normalized = value.Trim();
+ try
+ {
+ if (normalized.StartsWith('#') && normalized.Length == 7)
+ {
+ return new Rgba32(
+ Convert.ToByte(normalized[1..3], 16),
+ Convert.ToByte(normalized[3..5], 16),
+ Convert.ToByte(normalized[5..7], 16),
+ 255);
+ }
+
+ if (normalized.Length == 6 && normalized.All(Uri.IsHexDigit))
+ {
+ normalized = "#" + normalized;
+ }
+
+ return Color.Parse(normalized).ToPixel();
+ }
+ catch
+ {
+ return fallback;
+ }
+ }
+
+ private sealed class ConfigurationValues
+ {
+ private readonly Dictionary _values;
+
+ private ConfigurationValues(Dictionary values)
+ {
+ _values = values;
+ }
+
+ public static ConfigurationValues Load(string filePath)
+ {
+ using var stream = File.OpenRead(filePath);
+ return Load(stream);
+ }
+
+ public static ConfigurationValues Load(Stream stream)
+ {
+ var document = XDocument.Load(stream);
+ var values = document
+ .Descendants("Setup")
+ .Where(element => element.Element("Nome") is not null)
+ .GroupBy(element => element.Element("Nome")!.Value, StringComparer.OrdinalIgnoreCase)
+ .ToDictionary(
+ group => group.Key,
+ group => group.Last().Element("Valore")?.Value ?? string.Empty,
+ StringComparer.OrdinalIgnoreCase);
+
+ if (values.Count == 0)
+ {
+ values = document.Root?
+ .Descendants()
+ .Where(element => !element.HasElements)
+ .GroupBy(element => element.Name.LocalName, StringComparer.OrdinalIgnoreCase)
+ .ToDictionary(group => group.Key, group => group.Last().Value, StringComparer.OrdinalIgnoreCase)
+ ?? new Dictionary(StringComparer.OrdinalIgnoreCase);
+ }
+
+ return new ConfigurationValues(values);
+ }
+
+ public string GetString(string name, string defaultValue = "")
+ {
+ return _values.TryGetValue(name, out var value) && !string.IsNullOrWhiteSpace(value)
+ ? value.Trim()
+ : defaultValue;
+ }
+
+ public bool GetBool(string name, bool defaultValue = false)
+ {
+ var value = GetString(name);
+ if (string.IsNullOrWhiteSpace(value))
+ {
+ return defaultValue;
+ }
+
+ return value.Trim().ToUpperInvariant() switch
+ {
+ "TRUE" or "OK" or "SI" or "SÌ" or "1" or "YES" or "VERO" => true,
+ "FALSE" or "NO" or "0" or "FALSO" => false,
+ _ => defaultValue
+ };
+ }
+
+ public int GetInt(string name, int defaultValue = 0)
+ {
+ return int.TryParse(GetString(name), NumberStyles.Integer, CultureInfo.InvariantCulture, out var value)
+ ? value
+ : defaultValue;
+ }
+
+ public long GetLong(string name, long defaultValue = 0)
+ {
+ return long.TryParse(GetString(name), NumberStyles.Integer, CultureInfo.InvariantCulture, out var value)
+ ? value
+ : defaultValue;
+ }
+
+ public DateTime GetDateTime(string name, DateTime defaultValue)
+ {
+ var value = GetString(name);
+ if (DateTime.TryParse(value, CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out var invariantDate))
+ {
+ return invariantDate;
+ }
+
+ return DateTime.TryParse(value, CultureInfo.CurrentCulture, DateTimeStyles.AssumeLocal, out var localDate)
+ ? localDate
+ : defaultValue;
+ }
+ }
+}
\ No newline at end of file
diff --git a/CatalogLite/CatalogLite.csproj b/CatalogLite/CatalogLite.csproj
new file mode 100644
index 0000000..be2b0bc
--- /dev/null
+++ b/CatalogLite/CatalogLite.csproj
@@ -0,0 +1,81 @@
+
+
+ net10.0
+ Exe
+ enable
+ enable
+ CatalogLite
+ CatalogLite
+ false
+ 2026-12-31
+ true
+ false
+ true
+ true
+ false
+ false
+ embedded
+
+
+
+ WinExe
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_CatalogLiteExpirationDateIsIso>$([System.Text.RegularExpressions.Regex]::IsMatch('$(CatalogLiteExpirationDate)', '^\d{4}-\d{2}-\d{2}$'))
+
+
+
+
+
+
+
+
+
+
+ <_CatalogLiteForbiddenReference Include="@(ReferencePath)" Condition="$([System.String]::Copy('%(FileName)').StartsWith('AIFotoONLUS')) Or '%(FileName)' == 'Catalog.Communication' Or '%(FileName)' == 'Microsoft.Windows.Compatibility' Or '%(FileName)' == 'System.Drawing.Common' Or '%(FileName)' == 'System.Private.Windows.GdiPlus' Or '%(FileName)' == 'System.Windows.Extensions'" />
+
+
+
+
+
+
+ <_CatalogLiteSidecarFile Include="$(PublishDir)**\*.dll.config;$(PublishDir)**\*.pdb" />
+
+
+
+
+
+
+ <_CatalogLiteLooseNativeFile Include="$(PublishDir)**\*.dll;$(PublishDir)**\*.so;$(PublishDir)**\*.dylib" />
+
+
+
+
\ No newline at end of file
diff --git a/CatalogLite/CatalogLiteConfiguration.cs b/CatalogLite/CatalogLiteConfiguration.cs
new file mode 100644
index 0000000..87569e7
--- /dev/null
+++ b/CatalogLite/CatalogLiteConfiguration.cs
@@ -0,0 +1,11 @@
+using MaddoShared;
+
+namespace CatalogLite;
+
+public sealed class CatalogLiteConfiguration
+{
+ public required string FilePath { get; init; }
+ public required string SourcePath { get; init; }
+ public required string DestinationPath { get; init; }
+ public required ImageCreationService.Options Options { get; init; }
+}
\ No newline at end of file
diff --git a/CatalogLite/ExpirationGuard.cs b/CatalogLite/ExpirationGuard.cs
new file mode 100644
index 0000000..b800cf2
--- /dev/null
+++ b/CatalogLite/ExpirationGuard.cs
@@ -0,0 +1,39 @@
+using System.Globalization;
+using System.Reflection;
+
+namespace CatalogLite;
+
+internal static class ExpirationGuard
+{
+ private const string GeneratedMetadataKey = "CatalogLiteGeneratedExpirationDate";
+ private const string MetadataKey = "CatalogLiteExpirationDate";
+
+ public static bool IsExpired(out DateOnly? expirationDate)
+ {
+ expirationDate = TryReadExpirationDate();
+ return expirationDate is null || DateOnly.FromDateTime(DateTime.Now) > expirationDate.Value;
+ }
+
+ private static DateOnly? TryReadExpirationDate()
+ {
+ if (TryParseDate(BuildExpiration.ExpirationDate, out var generatedDate))
+ {
+ return generatedDate;
+ }
+
+ var metadata = typeof(Program).Assembly.GetCustomAttributes();
+ var metadataValue = metadata.FirstOrDefault(attribute => string.Equals(attribute.Key, GeneratedMetadataKey, StringComparison.Ordinal))?.Value
+ ?? metadata.FirstOrDefault(attribute => string.Equals(attribute.Key, MetadataKey, StringComparison.Ordinal))?.Value;
+
+ return TryParseDate(metadataValue, out var metadataDate)
+ ? metadataDate
+ : null;
+ }
+
+ private static bool TryParseDate(string? value, out DateOnly date)
+ {
+ var trimmedValue = value?.Trim();
+ return DateOnly.TryParseExact(trimmedValue, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out date)
+ || DateOnly.TryParse(trimmedValue, CultureInfo.CurrentCulture, DateTimeStyles.None, out date);
+ }
+}
\ No newline at end of file
diff --git a/CatalogLite/ExpiredWindow.cs b/CatalogLite/ExpiredWindow.cs
new file mode 100644
index 0000000..c5b84f1
--- /dev/null
+++ b/CatalogLite/ExpiredWindow.cs
@@ -0,0 +1,52 @@
+using Avalonia.Controls;
+using Avalonia.Layout;
+
+namespace CatalogLite;
+
+internal sealed class ExpiredWindow : Window
+{
+ public ExpiredWindow(DateOnly? expirationDate)
+ {
+ Title = "Catalog Lite";
+ Width = 430;
+ Height = 190;
+ CanResize = false;
+ WindowStartupLocation = WindowStartupLocation.CenterScreen;
+
+ var message = expirationDate is null
+ ? "L'applicazione è scaduta e non può essere utilizzata."
+ : $"L'applicazione è scaduta il {expirationDate:dd/MM/yyyy} e non può essere utilizzata.";
+
+ var closeButton = new Button
+ {
+ Content = "Chiudi",
+ HorizontalAlignment = HorizontalAlignment.Right,
+ MinWidth = 96
+ };
+ closeButton.Click += (_, _) => Close();
+
+ Content = new Border
+ {
+ Padding = new Avalonia.Thickness(22),
+ Child = new StackPanel
+ {
+ Spacing = 14,
+ Children =
+ {
+ new TextBlock
+ {
+ Text = "Applicazione scaduta",
+ FontSize = 18,
+ FontWeight = Avalonia.Media.FontWeight.SemiBold
+ },
+ new TextBlock
+ {
+ Text = message,
+ TextWrapping = Avalonia.Media.TextWrapping.Wrap
+ },
+ closeButton
+ }
+ }
+ };
+ }
+}
\ No newline at end of file
diff --git a/CatalogLite/ImageProcessingCoordinator.cs b/CatalogLite/ImageProcessingCoordinator.cs
new file mode 100644
index 0000000..dcf78d7
--- /dev/null
+++ b/CatalogLite/ImageProcessingCoordinator.cs
@@ -0,0 +1,95 @@
+using System.Collections.Concurrent;
+using System.Diagnostics;
+using MaddoShared;
+using Microsoft.Extensions.Logging;
+
+namespace CatalogLite;
+
+public readonly record struct ImageProcessedUpdate(string Status, int Total, int Processed);
+
+public sealed class ImageProcessingRunResult
+{
+ public required string FinalSpeedCounter { get; init; }
+}
+
+public sealed class ImageProcessingCoordinator
+{
+ private readonly ImageCreationService _imageCreationService;
+ private readonly ILogger _logger;
+
+ public ImageProcessingCoordinator(ImageCreationService imageCreationService, ILogger logger)
+ {
+ _imageCreationService = imageCreationService;
+ _logger = logger;
+ }
+
+ public async Task RunAsync(
+ ImageCreationService.Options options,
+ CancellationToken token,
+ Action onImageProcessed,
+ Action onSpeedUpdated)
+ {
+ var results = new ConcurrentBag();
+ var recentDiffs = new Queue();
+ const int recentWindowSize = 5;
+
+ var currentAmount = 0;
+ var previousAmount = 0;
+ var processedAtomic = 0;
+ var speedWatch = Stopwatch.StartNew();
+
+ using var speedTimer = new System.Threading.Timer(_ =>
+ {
+ try
+ {
+ previousAmount = currentAmount;
+ currentAmount = Volatile.Read(ref processedAtomic);
+ var diff = Math.Max(0, currentAmount - previousAmount);
+
+ lock (recentDiffs)
+ {
+ recentDiffs.Enqueue(diff);
+ if (recentDiffs.Count > recentWindowSize)
+ {
+ recentDiffs.Dequeue();
+ }
+ }
+
+ double recentAverage;
+ lock (recentDiffs)
+ {
+ recentAverage = recentDiffs.Count == 0 ? 0.0 : recentDiffs.Average();
+ }
+
+ var total = Volatile.Read(ref processedAtomic);
+ var overall = speedWatch.Elapsed.TotalSeconds > 0 ? total / speedWatch.Elapsed.TotalSeconds : 0.0;
+ var elapsed = speedWatch.Elapsed;
+ var elapsedText = $"{(int)elapsed.TotalHours}h {elapsed.Minutes}m {elapsed.Seconds}s";
+
+ onSpeedUpdated($"{recentAverage:0.00} f/s (media: {overall:0.00} f/s) - {elapsedText}{Environment.NewLine}media: {recentAverage * 60.0:0.00} f/m");
+ }
+ catch (Exception ex)
+ {
+ _logger.LogDebug(ex, "Errore durante l'aggiornamento della velocità ");
+ }
+ }, null, TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(1));
+
+ EventHandler> onImageProcessedInternal = (_, args) =>
+ {
+ var processed = Interlocked.Increment(ref processedAtomic);
+ onImageProcessed(new ImageProcessedUpdate(args.Item1, args.Item2, processed));
+ };
+
+ await _imageCreationService.CreaCatalogoParallel(options, results, onImageProcessedInternal, token).ConfigureAwait(false);
+
+ speedWatch.Stop();
+ var finalProcessed = Volatile.Read(ref processedAtomic);
+ var finalAverage = speedWatch.Elapsed.TotalSeconds > 0 ? finalProcessed / speedWatch.Elapsed.TotalSeconds : 0.0;
+ var finalElapsed = speedWatch.Elapsed;
+
+ return new ImageProcessingRunResult
+ {
+ FinalSpeedCounter = $"{(int)finalElapsed.TotalHours}h {finalElapsed.Minutes}m {finalElapsed.Seconds}s{Environment.NewLine}media: {finalAverage:0.00} f/s{Environment.NewLine}media: {finalAverage * 60.0:0.00} f/m"
+ };
+ }
+}
\ No newline at end of file
diff --git a/CatalogLite/LiteCatalogViewModel.cs b/CatalogLite/LiteCatalogViewModel.cs
new file mode 100644
index 0000000..656e4d2
--- /dev/null
+++ b/CatalogLite/LiteCatalogViewModel.cs
@@ -0,0 +1,347 @@
+using MaddoShared;
+using Microsoft.Extensions.Logging;
+
+namespace CatalogLite;
+
+public sealed class LiteCatalogViewModel : ViewModelBase
+{
+ private readonly CatalogConfigurationLoader _configurationLoader;
+ private readonly PicSettings _picSettings;
+ private readonly ImageCreationService _imageCreationService;
+ private readonly ImageProcessingCoordinator _imageProcessingCoordinator;
+ private readonly ILogger _logger;
+ private CatalogLiteConfiguration? _configuration;
+ private CancellationTokenSource? _processingTokenSource;
+ private string _sourcePath = string.Empty;
+ private string _destinationPath = string.Empty;
+ private string _processingStatus = "Caricamento configurazione incorporata...";
+ private string _speedCounter = "-";
+ private int _processedImagesCount;
+ private int _totalImagesCount;
+ private int _progressBarValue;
+ private int _progressBarMaximum = 100;
+ private bool _isProcessing;
+
+ public LiteCatalogViewModel(
+ CatalogConfigurationLoader configurationLoader,
+ PicSettings picSettings,
+ ImageCreationService imageCreationService,
+ ImageProcessingCoordinator imageProcessingCoordinator,
+ ILogger logger)
+ {
+ _configurationLoader = configurationLoader;
+ _picSettings = picSettings;
+ _imageCreationService = imageCreationService;
+ _imageProcessingCoordinator = imageProcessingCoordinator;
+ _logger = logger;
+
+ SelectSourceFolderCommand = new AsyncCommand(RequestSourceFolderAsync, () => !IsProcessing);
+ SelectDestinationFolderCommand = new AsyncCommand(RequestDestinationFolderAsync, () => !IsProcessing);
+ StartProcessingCommand = new AsyncCommand(StartProcessingAsync, CanStartProcessing);
+ StopProcessingCommand = new AsyncCommand(StopProcessingAsync, () => IsProcessing);
+ }
+
+ public event EventHandler? SelectSourceFolderRequested;
+ public event EventHandler? SelectDestinationFolderRequested;
+ public event EventHandler? ShowMessageRequested;
+
+ public Action? UiInvoker { get; set; }
+
+ public AsyncCommand SelectSourceFolderCommand { get; }
+ public AsyncCommand SelectDestinationFolderCommand { get; }
+ public AsyncCommand StartProcessingCommand { get; }
+ public AsyncCommand StopProcessingCommand { get; }
+
+ public string SourcePath
+ {
+ get => _sourcePath;
+ set
+ {
+ _sourcePath = NormalizeDirectoryPath(value);
+ NotifyPropertyChanged();
+ RaiseCommandStates();
+ }
+ }
+
+ public string HorizontalText
+ {
+ get => _picSettings.TestoFirmaStart ?? string.Empty;
+ set
+ {
+ _picSettings.TestoFirmaStart = value ?? string.Empty;
+ NotifyPropertyChanged();
+ }
+ }
+
+ public string VerticalText
+ {
+ get => _picSettings.TestoFirmaStartV ?? string.Empty;
+ set
+ {
+ _picSettings.TestoFirmaStartV = value ?? string.Empty;
+ NotifyPropertyChanged();
+ }
+ }
+
+ public string DestinationPath
+ {
+ get => _destinationPath;
+ set
+ {
+ _destinationPath = NormalizeDirectoryPath(value);
+ NotifyPropertyChanged();
+ RaiseCommandStates();
+ }
+ }
+
+ public string ProcessingStatus
+ {
+ get => _processingStatus;
+ private set
+ {
+ _processingStatus = value;
+ NotifyPropertyChanged();
+ }
+ }
+
+ public string SpeedCounter
+ {
+ get => _speedCounter;
+ private set
+ {
+ _speedCounter = value;
+ NotifyPropertyChanged();
+ }
+ }
+
+ public int ProcessedImagesCount
+ {
+ get => _processedImagesCount;
+ private set
+ {
+ _processedImagesCount = value;
+ NotifyPropertyChanged();
+ }
+ }
+
+ public int TotalImagesCount
+ {
+ get => _totalImagesCount;
+ private set
+ {
+ _totalImagesCount = value;
+ NotifyPropertyChanged();
+ }
+ }
+
+ public int ProgressBarValue
+ {
+ get => _progressBarValue;
+ private set
+ {
+ _progressBarValue = value;
+ NotifyPropertyChanged();
+ }
+ }
+
+ public int ProgressBarMaximum
+ {
+ get => _progressBarMaximum;
+ private set
+ {
+ _progressBarMaximum = Math.Max(1, value);
+ NotifyPropertyChanged();
+ }
+ }
+
+ public bool IsProcessing
+ {
+ get => _isProcessing;
+ private set
+ {
+ _isProcessing = value;
+ NotifyPropertyChanged();
+ RaiseCommandStates();
+ }
+ }
+
+ public void LoadEmbeddedConfiguration()
+ {
+ try
+ {
+ var configuration = _configurationLoader.LoadEmbedded(_picSettings);
+
+ _configuration = configuration;
+ SourcePath = configuration.SourcePath;
+ DestinationPath = configuration.DestinationPath;
+ NotifyPropertyChanged(nameof(HorizontalText));
+ NotifyPropertyChanged(nameof(VerticalText));
+ ResetProgress("Configurazione incorporata caricata.");
+ }
+ catch (Exception ex)
+ {
+ _logger.LogError(ex, "Errore durante il caricamento della configurazione incorporata");
+ ProcessingStatus = "Errore caricamento configurazione incorporata.";
+ ShowMessage("Configurazione", $"Impossibile caricare la configurazione incorporata: {ex.GetBaseException().Message}");
+ }
+ }
+
+ public static string NormalizeDirectoryPath(string? path)
+ {
+ if (string.IsNullOrWhiteSpace(path))
+ {
+ return string.Empty;
+ }
+
+ var trimmed = path.Trim().TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar);
+ return trimmed + Path.DirectorySeparatorChar;
+ }
+
+ private Task RequestSourceFolderAsync()
+ {
+ SelectSourceFolderRequested?.Invoke(this, EventArgs.Empty);
+ return Task.CompletedTask;
+ }
+
+ private Task RequestDestinationFolderAsync()
+ {
+ SelectDestinationFolderRequested?.Invoke(this, EventArgs.Empty);
+ return Task.CompletedTask;
+ }
+
+ private bool CanStartProcessing()
+ {
+ return !IsProcessing
+ && _configuration is not null
+ && !string.IsNullOrWhiteSpace(SourcePath)
+ && !string.IsNullOrWhiteSpace(DestinationPath);
+ }
+
+ private async Task StartProcessingAsync()
+ {
+ if (_configuration is null)
+ {
+ ShowMessage("Configurazione", "La configurazione incorporata non e' disponibile.");
+ return;
+ }
+
+ if (!Directory.Exists(SourcePath))
+ {
+ ShowMessage("Sorgente", "La cartella sorgente non esiste.");
+ return;
+ }
+
+ try
+ {
+ Directory.CreateDirectory(DestinationPath);
+ }
+ catch (Exception ex)
+ {
+ ShowMessage("Destinazione", $"Impossibile usare la cartella destinazione: {ex.GetBaseException().Message}");
+ return;
+ }
+
+ _processingTokenSource?.Dispose();
+ _processingTokenSource = new CancellationTokenSource();
+ var token = _processingTokenSource.Token;
+
+ var options = CatalogConfigurationLoader.CloneOptions(_configuration.Options, SourcePath, DestinationPath);
+ _picSettings.DirectorySorgente = SourcePath;
+ _picSettings.DirectoryDestinazione = DestinationPath;
+ _picSettings.DestDir = new DirectoryInfo(DestinationPath);
+
+ IsProcessing = true;
+ ResetProgress("Analisi immagini...");
+
+ try
+ {
+ var total = await Task.Run(() => _imageCreationService.GetFilesToProcessPublic(options).Count, token).ConfigureAwait(false);
+ RunOnUiThread(() =>
+ {
+ TotalImagesCount = total;
+ ProgressBarMaximum = Math.Max(1, total);
+ ProcessingStatus = total == 0 ? "Nessuna immagine trovata." : "Elaborazione in corso...";
+ });
+
+ if (total == 0)
+ {
+ return;
+ }
+
+ var result = await _imageProcessingCoordinator.RunAsync(
+ options,
+ token,
+ update => RunOnUiThread(() =>
+ {
+ ProcessedImagesCount = update.Processed;
+ TotalImagesCount = update.Total;
+ ProgressBarMaximum = update.Total;
+ ProgressBarValue = update.Processed;
+ ProcessingStatus = update.Status;
+ }),
+ speed => RunOnUiThread(() => SpeedCounter = speed)).ConfigureAwait(false);
+
+ RunOnUiThread(() =>
+ {
+ SpeedCounter = result.FinalSpeedCounter;
+ ProcessingStatus = "Finito.";
+ });
+ }
+ catch (OperationCanceledException)
+ {
+ RunOnUiThread(() => ProcessingStatus = "Operazione annullata.");
+ }
+ catch (Exception ex)
+ {
+ _logger.LogError(ex, "Errore durante l'elaborazione");
+ RunOnUiThread(() => ProcessingStatus = $"Errore: {ex.GetBaseException().Message}");
+ }
+ finally
+ {
+ _processingTokenSource?.Dispose();
+ _processingTokenSource = null;
+ RunOnUiThread(() => IsProcessing = false);
+ }
+ }
+
+ private Task StopProcessingAsync()
+ {
+ _processingTokenSource?.Cancel();
+ ProcessingStatus = "Arresto in corso...";
+ return Task.CompletedTask;
+ }
+
+ private void ResetProgress(string status)
+ {
+ ProcessingStatus = status;
+ ProcessedImagesCount = 0;
+ TotalImagesCount = 0;
+ ProgressBarValue = 0;
+ ProgressBarMaximum = 100;
+ SpeedCounter = "-";
+ }
+
+ private void RunOnUiThread(Action action)
+ {
+ if (UiInvoker is null)
+ {
+ action();
+ return;
+ }
+
+ UiInvoker(action);
+ }
+
+ private void ShowMessage(string title, string message)
+ {
+ RunOnUiThread(() => ShowMessageRequested?.Invoke(this, new LiteMessageEventArgs(title, message)));
+ }
+
+ private void RaiseCommandStates()
+ {
+ SelectSourceFolderCommand.RaiseCanExecuteChanged();
+ SelectDestinationFolderCommand.RaiseCanExecuteChanged();
+ StartProcessingCommand.RaiseCanExecuteChanged();
+ StopProcessingCommand.RaiseCanExecuteChanged();
+ }
+}
\ No newline at end of file
diff --git a/CatalogLite/LiteMessageEventArgs.cs b/CatalogLite/LiteMessageEventArgs.cs
new file mode 100644
index 0000000..230c787
--- /dev/null
+++ b/CatalogLite/LiteMessageEventArgs.cs
@@ -0,0 +1,13 @@
+namespace CatalogLite;
+
+public sealed class LiteMessageEventArgs : EventArgs
+{
+ public LiteMessageEventArgs(string title, string message)
+ {
+ Title = title;
+ Message = message;
+ }
+
+ public string Title { get; }
+ public string Message { get; }
+}
\ No newline at end of file
diff --git a/CatalogLite/MainWindow.axaml b/CatalogLite/MainWindow.axaml
new file mode 100644
index 0000000..3067595
--- /dev/null
+++ b/CatalogLite/MainWindow.axaml
@@ -0,0 +1,107 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/CatalogLite/MainWindow.axaml.cs b/CatalogLite/MainWindow.axaml.cs
new file mode 100644
index 0000000..03dfb6a
--- /dev/null
+++ b/CatalogLite/MainWindow.axaml.cs
@@ -0,0 +1,153 @@
+using Avalonia.Controls;
+using Avalonia.Platform.Storage;
+using Avalonia.Threading;
+using Microsoft.Extensions.DependencyInjection;
+using System.Diagnostics;
+using System.IO;
+
+namespace CatalogLite;
+
+public partial class MainWindow : Window
+{
+ private readonly LiteCatalogViewModel _viewModel;
+
+ public MainWindow()
+ : this(Program.ServiceProvider.GetRequiredService())
+ {
+ }
+
+ public MainWindow(LiteCatalogViewModel viewModel)
+ {
+ InitializeComponent();
+
+ _viewModel = viewModel;
+ DataContext = _viewModel;
+ _viewModel.UiInvoker = action => Dispatcher.UIThread.Invoke(action);
+ _viewModel.SelectSourceFolderRequested += OnSelectSourceFolderRequested;
+ _viewModel.SelectDestinationFolderRequested += OnSelectDestinationFolderRequested;
+ _viewModel.ShowMessageRequested += OnShowMessageRequested;
+ _viewModel.LoadEmbeddedConfiguration();
+ }
+
+ private async void OnSelectSourceFolderRequested(object? sender, EventArgs e)
+ {
+ var folders = await StorageProvider.OpenFolderPickerAsync(new FolderPickerOpenOptions
+ {
+ Title = "Seleziona cartella sorgente"
+ });
+
+ if (folders.Count > 0)
+ {
+ _viewModel.SourcePath = LiteCatalogViewModel.NormalizeDirectoryPath(folders[0].Path.LocalPath);
+ }
+ }
+
+ private async void OnSelectDestinationFolderRequested(object? sender, EventArgs e)
+ {
+ var folders = await StorageProvider.OpenFolderPickerAsync(new FolderPickerOpenOptions
+ {
+ Title = "Seleziona cartella destinazione"
+ });
+
+ if (folders.Count > 0)
+ {
+ _viewModel.DestinationPath = LiteCatalogViewModel.NormalizeDirectoryPath(folders[0].Path.LocalPath);
+ }
+ }
+
+ private void OpenSourcePath_Click(object? sender, Avalonia.Interactivity.RoutedEventArgs e)
+ {
+ OpenInExplorer(_viewModel.SourcePath);
+ }
+
+ private void OpenDestinationPath_Click(object? sender, Avalonia.Interactivity.RoutedEventArgs e)
+ {
+ OpenInExplorer(_viewModel.DestinationPath);
+ }
+
+ private async void OnShowMessageRequested(object? sender, LiteMessageEventArgs e)
+ {
+ await ShowMessageDialogAsync(e.Title, e.Message);
+ }
+
+ private async Task ShowMessageDialogAsync(string title, string message)
+ {
+ var closeButton = new Button
+ {
+ Content = "OK",
+ HorizontalAlignment = Avalonia.Layout.HorizontalAlignment.Right,
+ MinWidth = 92
+ };
+
+ var dialog = new Window
+ {
+ Title = title,
+ Width = 420,
+ Height = 180,
+ CanResize = false,
+ WindowStartupLocation = WindowStartupLocation.CenterOwner,
+ Content = new Border
+ {
+ Padding = new Avalonia.Thickness(20),
+ Child = new StackPanel
+ {
+ Spacing = 14,
+ Children =
+ {
+ new TextBlock
+ {
+ Text = message,
+ TextWrapping = Avalonia.Media.TextWrapping.Wrap
+ },
+ closeButton
+ }
+ }
+ }
+ };
+
+ closeButton.Click += (_, _) => dialog.Close();
+ await dialog.ShowDialog(this);
+ }
+
+ private static void OpenInExplorer(string? path)
+ {
+ if (string.IsNullOrWhiteSpace(path))
+ {
+ return;
+ }
+
+ var normalizedPath = path.Trim().Trim('"');
+
+ try
+ {
+ if (File.Exists(normalizedPath))
+ {
+ Process.Start("explorer.exe", $"/select,\"{normalizedPath}\"");
+ return;
+ }
+
+ if (Directory.Exists(normalizedPath))
+ {
+ Process.Start(new ProcessStartInfo
+ {
+ FileName = normalizedPath,
+ UseShellExecute = true
+ });
+ return;
+ }
+
+ var containingDirectory = Path.GetDirectoryName(normalizedPath);
+ if (!string.IsNullOrWhiteSpace(containingDirectory) && Directory.Exists(containingDirectory))
+ {
+ Process.Start(new ProcessStartInfo
+ {
+ FileName = containingDirectory,
+ UseShellExecute = true
+ });
+ }
+ }
+ catch
+ {
+ }
+ }
+}
\ No newline at end of file
diff --git a/CatalogLite/Program.cs b/CatalogLite/Program.cs
new file mode 100644
index 0000000..ab18009
--- /dev/null
+++ b/CatalogLite/Program.cs
@@ -0,0 +1,45 @@
+using Avalonia;
+using MaddoShared;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Logging;
+
+namespace CatalogLite;
+
+internal static class Program
+{
+ public static IServiceProvider ServiceProvider { get; private set; } = default!;
+
+ [STAThread]
+ public static int Main(string[] args)
+ {
+ var services = new ServiceCollection();
+ ConfigureServices(services);
+ ServiceProvider = services.BuildServiceProvider();
+
+ BuildAvaloniaApp().StartWithClassicDesktopLifetime(args ?? []);
+ return 0;
+ }
+
+ public static AppBuilder BuildAvaloniaApp()
+ => AppBuilder.Configure()
+ .UsePlatformDetect()
+ .LogToTrace();
+
+ private static void ConfigureServices(IServiceCollection services)
+ {
+ services.AddSingleton();
+ services.AddSingleton();
+ services.AddTransient();
+ services.AddTransient(sp => sp.GetRequiredService());
+ services.AddTransient();
+ services.AddTransient();
+ services.AddTransient();
+ services.AddTransient();
+
+ services.AddLogging(builder =>
+ {
+ builder.AddConsole();
+ builder.SetMinimumLevel(LogLevel.Information);
+ });
+ }
+}
\ No newline at end of file
diff --git a/CatalogLite/ViewModelBase.cs b/CatalogLite/ViewModelBase.cs
new file mode 100644
index 0000000..7d0647a
--- /dev/null
+++ b/CatalogLite/ViewModelBase.cs
@@ -0,0 +1,14 @@
+using System.ComponentModel;
+using System.Runtime.CompilerServices;
+
+namespace CatalogLite;
+
+public abstract class ViewModelBase : INotifyPropertyChanged
+{
+ public event PropertyChangedEventHandler? PropertyChanged;
+
+ protected void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
+ {
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
+ }
+}
\ No newline at end of file
diff --git a/CatalogVbLib/CatalogVbLib.vbproj b/CatalogVbLib/CatalogVbLib.vbproj
deleted file mode 100644
index e042d2f..0000000
--- a/CatalogVbLib/CatalogVbLib.vbproj
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
- net9.0-windows
- Library
- false
- true
-
-
- embedded
-
-
- embedded
-
-
-
- True
- Application.myapp
- True
-
-
- True
- True
- Resources.resx
-
-
- True
- Settings.settings
- True
-
-
-
-
- MyApplicationCodeGenerator
- Application.Designer.vb
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/CatalogVbLib/Class1.vb b/CatalogVbLib/Class1.vb
deleted file mode 100644
index 875798b..0000000
--- a/CatalogVbLib/Class1.vb
+++ /dev/null
@@ -1,3 +0,0 @@
-Public Class Class1
-
-End Class
diff --git a/CatalogVbLib/ExifReader.vb b/CatalogVbLib/ExifReader.vb
deleted file mode 100644
index 15a19bd..0000000
--- a/CatalogVbLib/ExifReader.vb
+++ /dev/null
@@ -1,1068 +0,0 @@
-'''-----------------------------------------------------------------------------
-'''
-''' 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/ImageCreator.vb b/CatalogVbLib/ImageCreator.vb
deleted file mode 100644
index 3b24fea..0000000
--- a/CatalogVbLib/ImageCreator.vb
+++ /dev/null
@@ -1,844 +0,0 @@
-Imports System.Drawing
-Imports System.IO
-Imports System.Drawing.Drawing2D
-Imports System.Drawing.Imaging
-Imports System.Windows.Forms
-'Imports System.Threading
-
-Public Class ImageCreator
-#Region "dichiarazioni"
-
-
- Private FotoRuotaADestra As Boolean = False
- Private FotoRuotaASinistra As Boolean = False
-
- Private TempMinText As String = ""
- 'Private crFont1 As Font
- Private _NomeFileChild As String
-
- Private _SourceDir As DirectoryInfo
- Private _DestDirStart As DirectoryInfo
- Private _DestDir As DirectoryInfo
-
- Private _workFile As FileInfo
-
- Private testoFirma As String
- Private testoFirmaV As String
- Private alphaScelta As Integer
- Private DimensioneStandard As Integer
- Private DimensioneStandardMiniatura As Integer
- Private dataFoto As DateTime
- Private dataPartenzaI As DateTime
- Private testoOrario As String
- Private testoFirmaPiccola As String
- Private thumbSizeSmall As Size
- Private thumbSizeBig As Size
- Private nomeFileSmall As String
- Private nomeFileBig As String
- Private nomeFileBig2 As String
-
- Private yPosFromBottom As Single
- Private yPosFromBottom1 As Single
- Private yPosFromBottom2 As Single
- Private yPosFromBottom3 As Single
- Private yPosFromBottom4 As Single
-#End Region
-
- Public Sub New()
-
- End Sub
-
- Public Sub New(ByVal nomeFileChild As String, ByVal sourceDir As DirectoryInfo, ByVal destDir As DirectoryInfo, ByVal destDirStart As DirectoryInfo)
- Me.NomeFileChild = nomeFileChild
- Me.SourceDir = sourceDir
- Me.DestDir = destDir
- Me.DestDirStart = destDirStart
- Me.WorkFile = New FileInfo(nomeFileChild)
- End Sub
-
- Public Sub New(ByVal nomeFileChild As String, ByVal sourceDir As DirectoryInfo, ByVal destDir As DirectoryInfo)
- Me.NomeFileChild = nomeFileChild
- Me.DestDir = destDir
- End Sub
-
- Public Sub New(ByVal file As FileInfo, ByVal destination As DirectoryInfo)
- Me.WorkFile = file
- Me.DestDir = destination
-
- End Sub
-
- Public Sub CreaImmagineThread(ByVal Info As String)
-
- Try
-
- preparaVariabili()
- 'Dim g As System.Drawing.Image = System.Drawing.Image.FromFile(Path.Combine(SourceDir.FullName, NomeFileChild))
- Using g As Image = Image.FromFile(WorkFile.FullName)
-
-
-
-
- 'Dim g As System.Drawing.Image = System.Drawing.Image.FromFile(WorkFile.FullName)
-
- ' Imposta testo extra
- impostaTestoExtra(g)
-
- ' Ruota l'immagine in base ai dati EXIF
- Rotation(g)
-
- ' Forza jpeg se è selezionata l'opzione
- Dim thisFormat As System.Drawing.Imaging.ImageFormat = g.RawFormat
- If PicSettings.UsaForzaJpg = True Then thisFormat = System.Drawing.Imaging.ImageFormat.Jpeg
-
- prepareThumbnailSize(g)
-
- Dim imgOutputBig As 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)
- End Using
- 'g.Dispose()
-
- GC.Collect()
-
- 'PicSettings.mainForm.stepProgressBar()
-
- Catch ex As Exception
- Dim e = ex.Demystify()
- Console.WriteLine(e)
- Console.WriteLine(e.Message)
- Console.WriteLine(e.StackTrace)
- 'MessageBox.Show(ex.Message)
-
-
- End Try
-
-
-
- End Sub
-
- Private Sub Rotation(ByRef g As System.Drawing.Image)
-
- FotoRuotaADestra = False
- FotoRuotaASinistra = False
-
- If PicSettings.UsaRotazioneAutomatica = True Then
- If g.PropertyIdList.Length > 0 Then ' ci sono dati exif
- Dim DatiExif As New ExifReader(CType(g, Bitmap))
-
- Select Case DatiExif.Orientation
- Case ExifReader.Orientations.BottomLeft
-
- Case ExifReader.Orientations.BottomRight
-
- Case ExifReader.Orientations.LeftTop
-
- Case ExifReader.Orientations.LftBottom
- FotoRuotaASinistra = True
- Case ExifReader.Orientations.RightBottom
-
- Case ExifReader.Orientations.RightTop
-
- Case ExifReader.Orientations.TopLeft
-
- Case ExifReader.Orientations.TopRight
-
- End Select
- End If
- End If
-
- If FotoRuotaASinistra = True Then
- g.RotateFlip(RotateFlipType.Rotate270FlipNone)
- End If
- If FotoRuotaADestra = True Then
- g.RotateFlip(RotateFlipType.Rotate90FlipNone)
- End If
-
-
-
- End Sub
- '''
- ''' Aggiunge Orario, tempo gara e altri
- '''
- ''' Image
- '''
- Private Sub impostaTestoExtra(g As Image)
- If PicSettings.UsaOrarioTestoApplicare Or
- PicSettings.UsaTempoGaraTestoApplicare Or
- PicSettings.UsaOrarioMiniatura Or
- PicSettings.TestoMin Or
- PicSettings.AggTempoGaraMin Or
- PicSettings.AggNumTempMin Then
-
- If g.PropertyIdList.Length > 0 Then ' ci sono dati exif
- Dim DatiExif As New ExifReader(CType(g, Bitmap))
- dataFoto = DatiExif.DateTimeOriginal
- testoFirma = PicSettings.TestoFirmaStart
- testoFirmaV = PicSettings.TestoFirmaStartV
-
- If dataFoto.Year <> 1 Then
- testoFirmaPiccola = dataFoto.ToShortTimeString
- If PicSettings.UsaOrarioTestoApplicare = True Then
- testoFirma &= " " & dataFoto.ToShortDateString & " " & dataFoto.ToLongTimeString
- testoFirmaV &= " " & dataFoto.ToShortDateString & " " & dataFoto.ToLongTimeString
- End If
- If PicSettings.UsaTempoGaraTestoApplicare = True Then
- Dim Orario As TimeSpan = New TimeSpan(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")
- End If
- End If
-
- End If
- Else
- testoFirma = PicSettings.TestoFirmaStart
- testoFirmaV = PicSettings.TestoFirmaStartV
-
- End If
- End Sub
-
- '''
- ''' Prepara diverse variabili azzerandole, elaborandole e prendendole dalle impostazioni
- '''
- '''
- Private Sub preparaVariabili()
- alphaScelta = CType((255 * (100 - PicSettings.Trasparenza) / 100), Integer)
- testoFirma = ""
- testoFirmaV = ""
- dataPartenzaI = PicSettings.DataPartenza
- testoOrario = PicSettings.TestoOrario
- If testoOrario.Length > 0 Then testoOrario &= " "
- testoFirmaPiccola = ""
- thumbSizeSmall = New Size
- thumbSizeBig = New Size
- nomeFileSmall = ""
- nomeFileBig2 = ""
- nomeFileBig = ""
- DimensioneStandard = PicSettings.DimStandard
- DimensioneStandardMiniatura = PicSettings.DimStandardMiniatura
- 'nomeFileSmall = Suffisso & NomeFileChild
- 'nomeFileBig = NomeFileChild
- nomeFileSmall = Suffisso & WorkFile.Name
- nomeFileBig = WorkFile.Name
- End Sub
-
- Private Sub prepareThumbnailSize(g As Image)
- If g.Width > g.Height Then
- thumbSizeSmall = NewthumbSize(g.Width, g.Height, LarghezzaSmall, "Larghezza")
- Dim SizeOrig As New Size(g.Width, g.Height)
- thumbSizeBig = SizeOrig
- Else
- thumbSizeSmall = NewthumbSize(g.Width, g.Height, AltezzaSmall, "Altezza")
- Dim SizeOrig As New Size(g.Width, g.Height)
- thumbSizeBig = SizeOrig
- End If
- End Sub
-
- Private Sub creaMiniature(g As Image, imgOutputBig As Bitmap, thisFormat As ImageFormat)
- If PicSettings.TestoMin Then
- testoFirmaPiccola = nomeFileBig
- ElseIf PicSettings.AggNumTempMin Then
- testoFirmaPiccola = nomeFileBig + " "
- End If
- 'Dim yPosFromBottom4 As Single
-
- Dim crFont1 As Font = Nothing
- Dim crFont2 As Font = Nothing
- Dim crSize1 As SizeF = New SizeF
- Dim crSize2 As SizeF = New SizeF
-
- If PicSettings.CreaMiniature = True Then
- If PicSettings.AggiungiScritteMiniature = False Then
- If PicSettings.DirectorySorgente.ToUpper = PicSettings.DirectoryDestinazione.ToUpper Then
- nomeFileSmall = nomeFileSmall.Substring(0, nomeFileSmall.Length - 4) & Codice & nomeFileSmall.Substring(nomeFileSmall.Length - 4)
- End If
- If PicSettings.UsaOrarioMiniatura Or
- PicSettings.TestoMin Or
- PicSettings.AggTempoGaraMin Or
- PicSettings.AggNumTempMin Then
-
- If testoFirmaPiccola.Length > 0 Then
- Dim imgOutputSmall As Bitmap
- imgOutputSmall = CType(imgOutputBig.Clone, Bitmap)
-
- Dim grPhoto1 As Graphics
- grPhoto1 = Graphics.FromImage(imgOutputSmall)
- grPhoto1.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
-
- Dim LarghezzaStandard1 As Integer
- 'quick fix
- DimensioneStandardMiniatura = 50
- If PicSettings.Grassetto = True Then
- 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)
- End If
-
- crSize1 = grPhoto1.MeasureString(testoFirmaPiccola, crFont1)
- crSize2 = grPhoto1.MeasureString(testoFirma, crFont1)
- LarghezzaStandard1 = CType(crSize1.Width, Integer)
-
- If crSize1.Width > CType(g.Width, Single) Then
- Dim Conta As Integer = DimensioneStandardMiniatura
- Do
- If Conta > 20 Then
- Conta -= 5
- Else
- Conta -= 1
- End If
- If PicSettings.Grassetto = True Then
- crFont1 = New Font(PicSettings.IlFont, Conta, FontStyle.Bold)
- Else
- crFont1 = New Font(PicSettings.IlFont, Conta)
- End If
- crSize1 = grPhoto1.MeasureString(testoFirmaPiccola, crFont1)
- If crSize1.Width < CType(g.Width, Single) Then
- LarghezzaStandard1 = CType(crSize1.Width, Integer)
- Exit Do
- End If
- If Conta <= 5 Then Exit Do
- Loop
- DimensioneStandardMiniatura = Conta
- End If
-
- Select Case PicSettings.Posizione.ToUpper
- Case "ALTO"
- yPosFromBottom1 = (PicSettings.Margine)
- yPosFromBottom4 = (PicSettings.MargVert)
-
- Case "BASSO"
- yPosFromBottom1 = CType((g.Height - crSize1.Height - (g.Height * PicSettings.Margine / 100)), Single)
- yPosFromBottom4 = CType((g.Height - crSize1.Height - (g.Height * PicSettings.MargVert / 100)), Single)
-
- End Select
-
- Dim xCenterOfImg1 As Single
-
- Dim StrFormat1 As StringFormat = New StringFormat
- Select Case PicSettings.Allineamento.ToUpper
- Case "SINISTRA"
- xCenterOfImg1 = CType((PicSettings.Margine + (LarghezzaStandard1 / 2)), Single)
-
- If (LarghezzaStandard1 / 2) > (g.Width / 2) - PicSettings.Margine Then
- xCenterOfImg1 = CType((g.Width / 2), Single)
- End If
-
-
- Case "CENTRO"
- xCenterOfImg1 = CType((g.Width / 2), Single)
-
-
- Case "DESTRA"
- xCenterOfImg1 = CType((g.Width - PicSettings.Margine - (LarghezzaStandard1 / 2)), Single)
-
- If (LarghezzaStandard1 / 2) > (g.Width / 2) - PicSettings.Margine Then
- xCenterOfImg1 = CType((g.Width / 2), Single)
- End If
-
-
- End Select
- StrFormat1.Alignment = StringAlignment.Center
-
- Dim semiTransBrush21 As SolidBrush = New SolidBrush(Color.FromArgb(alphaScelta, 0, 0, 0))
- Dim semiTransBrush1 As SolidBrush = New SolidBrush(Color.FromArgb(alphaScelta, PicSettings.fontColoreRGB))
-
- 'quick fix
- DimensioneStandardMiniatura = PicSettings.DimMin
-
- If PicSettings.Grassetto = True Then
- crFont1 = New Font(PicSettings.IlFont, DimensioneStandardMiniatura, FontStyle.Bold)
- Else
- crFont1 = New Font(PicSettings.IlFont, DimensioneStandardMiniatura)
- End If
- 'asdgadfhdfhjgfsjgfjygfdhsdafa
- If PicSettings.TestoMin Then
- grPhoto1.DrawString(nomeFileBig, crFont1, semiTransBrush21, New PointF(xCenterOfImg1 + 1, yPosFromBottom1 + 1), StrFormat1)
- grPhoto1.DrawString(nomeFileBig, crFont1, semiTransBrush1, New PointF(xCenterOfImg1, yPosFromBottom1), StrFormat1)
- ElseIf PicSettings.AggTempoGaraMin And PicSettings.UsaTempoGaraTestoApplicare Then
- Dim Orario As TimeSpan = New TimeSpan(DateDiff(DateInterval.Second, dataPartenzaI, dataFoto) * 10000000)
- Dim tempstr As String = ""
-
-
- tempstr &= ControlChars.CrLf & 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)
-
- ElseIf PicSettings.AggNumTempMin Then
- Dim Orario As TimeSpan = New TimeSpan(DateDiff(DateInterval.Second, dataPartenzaI, dataFoto) * 10000000)
- Dim tempstr As String = ""
- tempstr &= nomeFileBig
-
- tempstr &= ControlChars.CrLf & 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)
- End If
-
- ' Salva la miniatura
- imgOutputSmall.Save(Path.Combine(DestDir.FullName, "Temp_" & nomeFileSmall), thisFormat)
- Dim g2 As System.Drawing.Image = System.Drawing.Image.FromFile(Path.Combine(DestDir.FullName, "Temp_" & nomeFileSmall))
- Dim imgOutputSmall2 As New Bitmap(g2, thumbSizeSmall.Width, thumbSizeSmall.Height)
- imgOutputSmall2.Save(Path.Combine(DestDir.FullName, nomeFileSmall), thisFormat)
-
- imgOutputSmall2.Dispose()
- imgOutputSmall.Dispose()
- g2.Dispose()
- Kill(Path.Combine(DestDir.FullName, "Temp_" & nomeFileSmall))
- Else
- Dim imgOutputSmall As New Bitmap(g, thumbSizeSmall.Width, thumbSizeSmall.Height)
- imgOutputSmall.Save(Path.Combine(DestDir.FullName, nomeFileSmall), thisFormat)
- imgOutputSmall.Dispose()
- End If
- Else
- Dim imgOutputSmall As New Bitmap(g, thumbSizeSmall.Width, thumbSizeSmall.Height)
- imgOutputSmall.Save(Path.Combine(DestDir.FullName, nomeFileSmall), thisFormat)
- imgOutputSmall.Dispose()
- End If
- End If
- End If
- End Sub
-
- Private Sub aggiungiTesto(g As Image, imgOutputBig As Bitmap)
- Dim grPhoto As Graphics
- grPhoto = Graphics.FromImage(imgOutputBig)
- grPhoto.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
-
- Dim crFont As Font = Nothing
- Dim crSize As SizeF = New SizeF
- Dim LarghezzaStandard As Integer
-
- If PicSettings.Grassetto = True Then
- crFont = New Font(PicSettings.IlFont, DimensioneStandard, FontStyle.Bold)
- Else
- crFont = New Font(PicSettings.IlFont, DimensioneStandard)
- End If
- crSize = grPhoto.MeasureString(testoFirma, crFont)
- LarghezzaStandard = CType(crSize.Width, Integer)
-
- If crSize.Width > CType(g.Width, Single) Then
- Dim Conta As Integer = DimensioneStandard
- Do
- If Conta > 20 Then
- Conta -= 5
- Else
- Conta -= 1
- End If
- If PicSettings.Grassetto = True Then
- crFont = New Font(PicSettings.IlFont, Conta, FontStyle.Bold)
- Else
- crFont = New Font(PicSettings.IlFont, Conta)
- End If
- crSize = grPhoto.MeasureString(testoFirma, crFont)
- If crSize.Width < CType(g.Width, Single) Then
- LarghezzaStandard = CType(crSize.Width, Integer)
- Exit Do
- End If
- If Conta <= 5 Then Exit Do
- Loop
- DimensioneStandard = Conta
- End If
-
-
- Select Case PicSettings.Posizione.ToUpper
- Case "ALTO"
- yPosFromBottom = (PicSettings.Margine)
- yPosFromBottom3 = (PicSettings.MargVert)
-
- Case "BASSO"
- yPosFromBottom = CType((g.Height - crSize.Height - (g.Height * PicSettings.Margine / 100)), Single)
- yPosFromBottom3 = CType((g.Height - crSize.Height - (g.Height * PicSettings.MargVert / 100)), Single)
- End Select
-
- Dim xCenterOfImg As Single
- Dim xCenterOfImg3 As Single
- Dim StrFormat As StringFormat = New StringFormat
- Select Case PicSettings.Allineamento.ToUpper
- Case "SINISTRA"
- xCenterOfImg = CType((PicSettings.Margine + (LarghezzaStandard / 2)), Single)
- xCenterOfImg3 = CType((PicSettings.MargVert + (LarghezzaStandard / 2)), Single)
- If (LarghezzaStandard / 2) > (g.Width / 2) - PicSettings.Margine Then
- xCenterOfImg = CType((g.Width / 2), Single)
- End If
- If (LarghezzaStandard / 2) > (g.Width / 2) - PicSettings.MargVert Then
- xCenterOfImg3 = CType((g.Width / 2), Single)
- End If
-
- Case "CENTRO"
- xCenterOfImg = CType((g.Width / 2), Single)
-
- Case "DESTRA"
- xCenterOfImg = CType((g.Width - PicSettings.Margine - (LarghezzaStandard / 2)), Single)
- xCenterOfImg3 = CType((g.Width - PicSettings.MargVert - (LarghezzaStandard / 2)), Single)
- If (LarghezzaStandard / 2) > (g.Width / 2) - PicSettings.Margine Then
- xCenterOfImg = CType((g.Width / 2), Single)
- End If
- If (LarghezzaStandard / 2) > (g.Width / 2) - PicSettings.MargVert Then
- xCenterOfImg3 = CType((g.Width / 2), Single)
- End If
-
- End Select
- StrFormat.Alignment = StringAlignment.Center
-
- Dim semiTransBrush2 As SolidBrush = New SolidBrush(Color.FromArgb(alphaScelta, 0, 0, 0))
- 'Dim semiTransBrush As SolidBrush = New SolidBrush(Color.FromArgb(AlphaScelta, _FontColoreR, _FontColoreG, _FontColoreB))
- Dim semiTransBrush As SolidBrush = New SolidBrush(Color.FromArgb(alphaScelta, PicSettings.fontColoreRGB))
-
- If FotoRuotaADestra Or FotoRuotaASinistra Then
-
- If PicSettings.Grassetto = True Then
- crFont = New Font(PicSettings.IlFont, DimVert, FontStyle.Bold)
- Else
- crFont = New Font(PicSettings.IlFont, DimVert)
- End If
-
- Else
-
- If PicSettings.Grassetto = True Then
- crFont = New Font(PicSettings.IlFont, DimensioneStandard, FontStyle.Bold)
- Else
- crFont = New Font(PicSettings.IlFont, DimensioneStandard)
- End If
- End If
-
-
- 'qui scrive il testo (nomefilebig)
- If PicSettings.TestoNome Then
- If NomeData And g.PropertyIdList.Length > 0 Then
- Dim DatiExif As New ExifReader(CType(g, Bitmap))
- 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)
-
- End If
- End If
-
- If PicSettings.TestoNome = False Then
- If FotoRuotaADestra Or FotoRuotaASinistra Then
- If PicSettings.TestoMin = False Then
-
-
- grPhoto.DrawString(testoFirmaV, crFont, semiTransBrush2, New PointF(xCenterOfImg + 1, yPosFromBottom3 + 1), StrFormat)
- grPhoto.DrawString(testoFirmaV, crFont, semiTransBrush, New PointF(xCenterOfImg, yPosFromBottom3), StrFormat)
- End If
- If PicSettings.TestoMin = True Then
-
- grPhoto.DrawString(testoFirmaV, crFont, semiTransBrush2, New PointF(xCenterOfImg + 1, yPosFromBottom4 + 1), StrFormat)
- grPhoto.DrawString(testoFirmaV, crFont, semiTransBrush, New PointF(xCenterOfImg, yPosFromBottom4), StrFormat)
-
- End If
- Else
- grPhoto.DrawString(testoFirma, crFont, semiTransBrush2, New PointF(xCenterOfImg + 1, yPosFromBottom + 1), StrFormat)
- grPhoto.DrawString(testoFirma, crFont, semiTransBrush, New PointF(xCenterOfImg, yPosFromBottom), StrFormat)
-
-
- End If
- End If
-
- If PicSettings.DirectorySorgente.ToUpper = PicSettings.DirectoryDestinazione.ToUpper Then
- nomeFileBig2 = nomeFileBig
- nomeFileBig = nomeFileBig.Substring(0, nomeFileBig.Length - 4) & Codice & nomeFileBig.Substring(nomeFileBig.Length - 4)
- End If
- grPhoto.Dispose()
- End Sub
-
-
-
-
- Private Sub aggiungiLogo(imgOutputBig As Bitmap)
- 'imgOutputBig
- If PicSettings.LogoAggiungi = True And File.Exists(PicSettings.LogoNomeFile) Then
-
- Dim ImmagineLogo As Image = Image.FromFile(PicSettings.LogoNomeFile)
-
- Dim LogoColoreTrasparente As Color = 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
- Dim grWatermark As Graphics = Graphics.FromImage(imgOutputBig)
-
- '* To achieve a translucent watermark we will apply (2) color manipulations
- Dim imageAttributes As Imaging.ImageAttributes = New Imaging.ImageAttributes
-
- '* The first step replace the background color with one that is transparent (Alpha=0, R=0, G=0, B=0)
- Dim colorMap As Imaging.ColorMap = New Imaging.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)
-
- Dim remapTable As Imaging.ColorMap() = {colorMap}
- imageAttributes.SetRemapTable(remapTable, Imaging.ColorAdjustType.Bitmap)
-
- '* The second color manipulation is used to change the opacity by setting the 3rd row and 3rd column to 0.3f
- Dim colorMatrixElements As Single()() = {New Single() {1.0F, 0.0F, 0.0F, 0.0F, 0.0F}, New Single() {0.0F, 1.0F, 0.0F, 0.0F, 0.0F}, New Single() {0.0F, 0.0F, 1.0F, 0.0F, 0.0F}, New Single() {0.0F, 0.0F, 0.0F, CType(PicSettings.LogoTrasparenza, Single) / 100, 0.0F}, New Single() {0.0F, 0.0F, 0.0F, 0.0F, 1.0F}}
- Dim wmColorMatrix As Imaging.ColorMatrix = New Imaging.ColorMatrix(colorMatrixElements)
- imageAttributes.SetColorMatrix(wmColorMatrix, Imaging.ColorMatrixFlag.Default, Imaging.ColorAdjustType.Bitmap)
-
- Dim FotoLogoH As Integer = PicSettings.LogoAltezza
- Dim FotoLogoW As Integer = PicSettings.LogoLarghezza
- Dim FattoreAlt As Double = ImmagineLogo.Height / FotoLogoH
- Dim FattoreLarg As Double = ImmagineLogo.Width / FotoLogoW
- Dim NuovaSize As Size
- If FattoreLarg > FattoreAlt Then
- NuovaSize = NewthumbSize(ImmagineLogo.Width, ImmagineLogo.Height, FotoLogoW, "Larghezza")
- Else
- NuovaSize = NewthumbSize(ImmagineLogo.Width, ImmagineLogo.Height, FotoLogoH, "Altezza")
- End If
-
- Dim MargineUsato As Integer
- Dim MargineL As Integer
- Dim InPercentualeL As Boolean
- If PicSettings.LogoMargine.EndsWith("%") = True Then
- InPercentualeL = True
- Else
- InPercentualeL = False
- End If
- MargineL = CType(Val(PicSettings.LogoMargine), Integer)
- If InPercentualeL = True Then
- MargineUsato = CType(imgOutputBig.Height * MargineL / 100, Integer)
- Else
- MargineUsato = MargineL
- End If
-
- Dim xPosOfWm As Integer
- Dim yPosOfWm As Integer
- Select Case PicSettings.LogoPosizioneH.ToUpper
- Case "SINISTRA", "NESSUNA"
- xPosOfWm = MargineUsato
-
- Case "CENTRO"
- xPosOfWm = CType((imgOutputBig.Width - NuovaSize.Width) / 2, Integer)
-
- Case "DESTRA"
- xPosOfWm = ((imgOutputBig.Width - NuovaSize.Width) - MargineUsato)
- End Select
- Select Case PicSettings.LogoPosizioneV.ToUpper
- Case "ALTO", "NESSUNA"
- yPosOfWm = MargineUsato
-
- Case "CENTRO"
- yPosOfWm = CType((imgOutputBig.Height - NuovaSize.Height) / 2, Integer)
-
- Case "BASSO"
- yPosOfWm = ((imgOutputBig.Height - NuovaSize.Height) - MargineUsato)
- End Select
-
- grWatermark.DrawImage(ImmagineLogo, New Rectangle(xPosOfWm, yPosOfWm, NuovaSize.Width, NuovaSize.Height), 0, 0, ImmagineLogo.Width, ImmagineLogo.Height, GraphicsUnit.Pixel, imageAttributes)
- grWatermark.Dispose()
- End If
- End Sub
-
-
- Private Sub salvaFoto(imgOutputBig As Bitmap, thumbSizeBig As Size, NomeFileBig As String, NomeFileSmall As String, thumbSizeSmall As Size, thisFormat As ImageFormat)
-
- If PicSettings.FotoGrandeDimOrigina = False Then
- 'attenzione non controlla se è png
- 'imgOutputBig.Save(Path.Combine(_DestDir.FullName, "Temp_" & NomeFileBig), thisFormat)
- If thisFormat.Equals(ImageFormat.Jpeg) Then
- salvaImmagineCustomQuality(imgOutputBig, Path.Combine(DestDir.FullName, "Temp_" & NomeFileBig), jpegQuality)
- Else
- imgOutputBig.Save(Path.Combine(_DestDir.FullName, "Temp_" & NomeFileBig), thisFormat)
- End If
-
-
- Dim g2 As System.Drawing.Image = System.Drawing.Image.FromFile(Path.Combine(DestDir.FullName, "Temp_" & NomeFileBig))
- If g2.Width > g2.Height Then
- thumbSizeBig = NewthumbSize(g2.Width, g2.Height, PicSettings.LarghezzaBig, "Larghezza")
- Else
- thumbSizeBig = NewthumbSize(g2.Width, g2.Height, PicSettings.AltezzaBig, "Altezza")
- End If
- Dim imgOutputBig2 As New Bitmap(g2, thumbSizeBig.Width, thumbSizeBig.Height)
- '
- If thisFormat.Equals(ImageFormat.Jpeg) Then
- salvaImmagineCustomQuality(imgOutputBig2, Path.Combine(DestDir.FullName, NomeFileBig), jpegQuality)
- Else
- imgOutputBig2.Save(Path.Combine(_DestDir.FullName, NomeFileBig), thisFormat)
- End If
-
- imgOutputBig2.Dispose()
- imgOutputBig.Dispose()
- g2.Dispose()
- Else
- '
- If thisFormat.Equals(ImageFormat.Jpeg) Then
- salvaImmagineCustomQuality(imgOutputBig, Path.Combine(DestDir.FullName, NomeFileBig), jpegQuality)
- Else
- imgOutputBig.Save(Path.Combine(_DestDir.FullName, NomeFileBig), thisFormat)
- End If
-
- imgOutputBig.Dispose()
- End If
-
-
- If PicSettings.CreaMiniature Then
- If PicSettings.AggiungiScritteMiniature = True Then
- Dim g1 As System.Drawing.Image
- If PicSettings.FotoGrandeDimOrigina = False Then
- g1 = System.Drawing.Image.FromFile(Path.Combine(DestDir.FullName, "Temp_" & NomeFileBig))
- Else
- g1 = System.Drawing.Image.FromFile(Path.Combine(DestDir.FullName, NomeFileBig))
- End If
- Dim imgOutputSmall As New Bitmap(g1, thumbSizeSmall.Width, thumbSizeSmall.Height)
- If PicSettings.DirectorySorgente.ToUpper = PicSettings.DirectoryDestinazione.ToUpper Then
- NomeFileSmall = NomeFileSmall.Substring(0, NomeFileSmall.Length - 4) & Codice & NomeFileSmall.Substring(NomeFileSmall.Length - 4)
- End If
- '
- If thisFormat.Equals(ImageFormat.Jpeg) Then
- salvaImmagineCustomQuality(imgOutputSmall, Path.Combine(DestDir.FullName, NomeFileSmall), jpegQualityMin)
- Else
- imgOutputSmall.Save(Path.Combine(_DestDir.FullName, NomeFileSmall), thisFormat)
- End If
-
- imgOutputSmall.Dispose()
- g1.Dispose()
- End If
-
-
-
- End If
-
- If File.Exists(Path.Combine(DestDir.FullName, "Temp_" & NomeFileBig)) = True Then
- Kill(Path.Combine(DestDir.FullName, "Temp_" & NomeFileBig))
- End If
-
-
- End Sub
-
- Private Sub salvaImmagineCustomQuality(imageToSave As Bitmap, nomeFileFinale As String, quality As Long)
-
- Dim JgpEncoder As ImageCodecInfo = GetEncoder(ImageFormat.Jpeg)
- Dim MyEncoder As Encoder = Encoder.Quality
-
- Dim MyEncoderParameters As New EncoderParameters(1)
-
- Dim MyEncoderParameter As New EncoderParameter(MyEncoder, jpegQuality)
- MyEncoderParameters.Param(0) = MyEncoderParameter
- imageToSave.Save(nomeFileFinale, JgpEncoder, MyEncoderParameters)
- imageToSave.Dispose()
- End Sub
-
-
-
- Private Function GetEncoder(ByVal format As ImageFormat) As ImageCodecInfo
-
- Dim codecs As ImageCodecInfo() = ImageCodecInfo.GetImageDecoders()
-
- Dim codec As ImageCodecInfo
- For Each codec In codecs
- If codec.FormatID = format.Guid Then
- Return codec
- End If
- Next codec
- Return Nothing
-
- End Function
-
-
-
-
-
-
- '''
- ''' Calculate the Size of the New image
- '''
- ''' Larghezza
- ''' Altezza
- '''
- '''
- '''
- '''
- Private Function NewthumbSize(ByVal currentwidth As Integer, ByVal currentheight As Integer, ByVal MaxPixel As Integer, ByVal TipoSize As String) As Size
- ' e
- '*** Larghezza, Altezza, Auto
-
- Dim tempMultiplier As Double
-
- If TipoSize.ToUpper = "Larghezza".ToUpper Then
- tempMultiplier = MaxPixel / currentwidth
- ElseIf TipoSize.ToUpper = "Altezza".ToUpper Then
- tempMultiplier = MaxPixel / currentheight
- Else
- If currentheight > currentwidth Then ' portrait
- tempMultiplier = MaxPixel / currentheight
- Else
- tempMultiplier = MaxPixel / currentwidth
- End If
- End If
-
- Dim NewSize As New Size(CInt(currentwidth * tempMultiplier), CInt(currentheight * tempMultiplier))
-
- Return NewSize
- End Function
-
- Public Property WorkFile() As FileInfo
- Get
- Return _workFile
- End Get
- Set(value As FileInfo)
- _workFile = 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 SourceDir() As DirectoryInfo
- Get
- Return _SourceDir
- End Get
- Set(ByVal value As DirectoryInfo)
- _SourceDir = value
- End Set
- End Property
-
- Public Property DestDirStart() As DirectoryInfo
- Get
- Return _DestDirStart
- End Get
- Set(ByVal value As DirectoryInfo)
- _DestDirStart = value
- End Set
- End Property
-
- Public Property NomeFileChild() As String
- Get
- Return _NomeFileChild
- End Get
- Set(ByVal value As String)
- _NomeFileChild = value
- End Set
- End Property
-
-
-End Class
diff --git a/CatalogVbLib/My Project/Application.Designer.vb b/CatalogVbLib/My Project/Application.Designer.vb
deleted file mode 100644
index 88dd01c..0000000
--- a/CatalogVbLib/My Project/Application.Designer.vb
+++ /dev/null
@@ -1,13 +0,0 @@
-'------------------------------------------------------------------------------
-'
-' This code was generated by a tool.
-' Runtime Version:4.0.30319.42000
-'
-' 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
deleted file mode 100644
index 758895d..0000000
--- a/CatalogVbLib/My Project/Application.myapp
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
- false
- false
- 0
- true
- 0
- 1
- true
-
diff --git a/CatalogVbLib/My Project/AssemblyInfo.vb b/CatalogVbLib/My Project/AssemblyInfo.vb
deleted file mode 100644
index 4d58ddf..0000000
--- a/CatalogVbLib/My Project/AssemblyInfo.vb
+++ /dev/null
@@ -1,9 +0,0 @@
-Imports System
-Imports System.Reflection
-Imports System.Runtime.InteropServices
-
-
-
-
-'Se il progetto viene esposto a COM, il GUID seguente verrà utilizzato come ID della libreria dei tipi
-
diff --git a/CatalogVbLib/My Project/Resources.Designer.vb b/CatalogVbLib/My Project/Resources.Designer.vb
deleted file mode 100644
index 176c107..0000000
--- a/CatalogVbLib/My Project/Resources.Designer.vb
+++ /dev/null
@@ -1,63 +0,0 @@
-'------------------------------------------------------------------------------
-'
-' This code was generated by a tool.
-' Runtime Version:4.0.30319.42000
-'
-' Changes to this file may cause incorrect behavior and will be lost if
-' the code is regenerated.
-'
-'------------------------------------------------------------------------------
-
-Option Strict On
-Option Explicit On
-
-Imports System
-
-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
- resourceCulture = value
- End Set
- End Property
- End Module
-End Namespace
diff --git a/CatalogVbLib/My Project/Resources.resx b/CatalogVbLib/My Project/Resources.resx
deleted file mode 100644
index af7dbeb..0000000
--- a/CatalogVbLib/My Project/Resources.resx
+++ /dev/null
@@ -1,117 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 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
deleted file mode 100644
index 9abf647..0000000
--- a/CatalogVbLib/My Project/Settings.Designer.vb
+++ /dev/null
@@ -1,73 +0,0 @@
-'------------------------------------------------------------------------------
-'
-' This code was generated by a tool.
-' Runtime Version:4.0.30319.42000
-'
-' 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(sender As Global.System.Object, 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
deleted file mode 100644
index 85b890b..0000000
--- a/CatalogVbLib/My Project/Settings.settings
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/CatalogVbLib/PicSettings.vb b/CatalogVbLib/PicSettings.vb
deleted file mode 100644
index 42a0da7..0000000
--- a/CatalogVbLib/PicSettings.vb
+++ /dev/null
@@ -1,606 +0,0 @@
-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/GitVersion.yml b/GitVersion.yml
new file mode 100644
index 0000000..a3baf60
--- /dev/null
+++ b/GitVersion.yml
@@ -0,0 +1,7 @@
+assembly-versioning-scheme: MajorMinorPatch
+mode: ContinuousDelivery
+branches: {}
+ignore:
+ sha: []
+merge-message-formats: {}
+next-version: "3.2.0"
\ No newline at end of file
diff --git a/ImageCatalogCS/AboutForm.Designer.cs b/ImageCatalogCS/AboutForm.Designer.cs
deleted file mode 100644
index 01cd505..0000000
--- a/ImageCatalogCS/AboutForm.Designer.cs
+++ /dev/null
@@ -1,101 +0,0 @@
-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
deleted file mode 100644
index 80e20f9..0000000
--- a/ImageCatalogCS/AboutForm.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-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
deleted file mode 100644
index 02a449f..0000000
--- a/ImageCatalogCS/AboutForm.resx
+++ /dev/null
@@ -1,229 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 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
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAAZ4AAADQCAIAAAC4O5DwAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAS
- cwAAEnMBjCK5BwAAC05JREFUeF7t2sGBG0cORmEn4PPmooCUxO7FGTgaJ+NgtE0OKZMeTTdQDVQBf7/v
- 4svuDLsK9boo6bcfACCHtAEQRNoACCJtAASRNgCCSBsAQaQNgCDSBkAQaQMgiLQBEETaAAgibQAEkTYA
- gkgbAEGkDYAg0gZAEGkDIIi0ARBE2gAIIm0ABJE2AIJIGwBBpA2AINIGQBBpAyCItAEQRNoACCJtAASR
- NgCCSBsAQaQNgCDSBkAQaQMgiLQBEETaAAgibQAEkTYAgkgbAEGkDYAg0pbqr++/Dfn259+PnwBhjEci
- 0hZndFBtvv/1+DXoifGYi7SdkzuvX+Gt3QTjsQ5pG/H3n98eU7QaL+uCGI8KSJtHnZn9NxJXAONRCWkz
- qTu0b/gmsgbjUdDKtB0PRIG9aDK1r1asmvsPlUSO2cXGo8WRfViXNsNQLL5GNxzbF3MX74Jpu+Z4HG90
- lZ1dlTbLXCwsW+7YHm5+2F+sTVvCa6UtvWr7q7N0PAy/vMberkmbZTSWrU/Y4OxyTtWJDzUlb9dJ25zx
- 2Hj2beZ4lD68L1akzfTOm3IgP5k2tzeD+z9yZUgftWukbep4bEYWacJ4WJZh/f7OT5tt6ReUbfbc3px6
- TOcQpy6pftpWjMdmfNcSx8O0Fqt3eHbabOs9fVVGXnUxAh7Vfujy1lU7bevGY3N2pTLGo+gxfjM5bbZl
- nrwkSwd3E3Odsk5wzuVNOG3G8fjP478ZAvYsejxsPy9n2Gymps24vFPXwzS4vz/+myTumNuOYcICq6bN
- tKDf/vff5Jdj0GpFjkfFw/xmYtqMb7+ZM2/5SN//sJ7az7toPvChD234reGLLJk203hsm25++BITEjUe
- Bc/zm2lpMy7EzJU43uNtFE2fe/9DW8Y3+rGPP3bsbzQf0adlE29mGo9NxwkJGY+CR/rVrLRZR3/aMhzu
- i3VuTZ/YMAWf3+hnHa554K9US5txPCz/y6oTEjAe1l2Pn22DOWkz7NuHWWtwtCfPz2Gf8ENHPyrlrB/9
- 0rD11kqbdTw2rSfk9HhYt33Fbk9Jm3nuw07avv3P87INsWU4+GlZ229+2jPMW/y0YtiNPAvWf0LOjYd5
- 3ycd7RcT0na0+z/Nmfb9j/P+GaKrsP/z8nZ/9/eGLLt5xJ/mbLafZzw2EhNyZjyKne4X+WkzD/2UZ9/d
- iX9/gv1tG5mzM0N0iuu5B5h3+Wn6pJt4l0llQk6Mx/4SvJp8cctOm/3BC876iQ3/QvxRKEIkbV5MSN0j
- npw2+8RXHPWEN+jujyRt3TAhG3vbpn7+1LQVfWYzBteMtH12nQmx7/7Ebc9MW/ey7T/A0CbtLwlp64YJ
- +eDY/mmPkJi2io/rEz9mu2vS+bSTtl+40IQUPOx5aetftqNn8A/a/s8ruwwGjt3+oJE2JuTJMQCTtj4r
- bfuvs3d1N+zoKXyf/OCntT7sV00bE/JUrm1JadMom+E57B8+8EcV5E7bh9bPfMeEPFVrW07aPINe+/V9
- 3GjT5z/+Mc1P+WDafur79EzIk2cGJjxLStp0ymYauaOHsCxH9WU4cjZtH1quAhPyYFqIp/y2ZaRNqWwb
- 8+N83i3z/7V72YLSdtdvLZiQD7XalpA2z5S3GGPXjo1oH7bQtN1N+MISiAn5UKpt8WlzDXmTCc4d3V7H
- +Nei03bTaV2YkLtKhz88bYpl26SNrsCN7SYjbZtGq8OE3BQ6/tFpcz1ar2OdcXo7XUx2JaVt02hImBBn
- 4FMfLjhtwmXbBL+Y2z3/jry0bS57uW84IXXaFpu2Qs3OEnWGWz7811LT1uuMX3xCytxuQtPmK1vbS8vp
- V7PSde0hOW3N1uzKE1ImAqFp881373vL6FkWu609paet33G/6oRUqUBk2nzPJHF18TyyaNQ+TEhbz5G5
- 3oQ4r6xpDx2Ytot8Hf21rydY7EG/8Hz+naeNqF/jw3+dCfFtdNrTB6bN90TSdxh87dyfQ13jRdFbkWtb
- XNoufWmDz4kbHO/E8py7m7SjcWkrcg1FE8N1o23VOa9tSS0IS1uRWyj6GP1qymuxuhLXtrC0cWmD39jV
- jekprsS1LSptXNowYuzmxvgUV+HaFpW2EldQNDR0cWN+ahNKW4kbKFoaaRsDVFuFHgSlzTmeTCb+Qdvk
- eP+cIePatiZtfJ/Ai5G2MUKlFQhCTNoqRBptjfxdAte20gp8jVuSNsYSb0baxuuxsgJFIG0oYOArKWmr
- zPuyStjNmLQVuH6is4G0MUSVXTVtvHDxbuAbKWmrjLQBd3wjFbM+CaQNFZA2Mc4NTbiDkzZUQNrEkDbg
- hrSJIW3ADWkTsz4JpA0V+NPG35CWRtqAG9KmhX+yC9wM/Ls23o+VOTc0owgxaSvwIOiMtIkhbcAN30fF
- OIuQ8Z6KSRt/2IYzuLSpKRAE0ob1uLSp8e1oym4GpY1vpFfyc7eDXlH+svFyrK1CD4LSVqHSyPLl5sbs
- I2WTU+CP2sLSVuFZEMOxlxFtGygbr8biKtx0otLmfBjSVtGKyDjfiXeUrbgSF52wtPmehuEsaX7bBn4j
- w1NeiRiEpY1rm4LJd6iRsDE69ZVoQVzauLYpGGnb4GYO/SrK1kCNFMSljWubhMHgeOdz6L624ZXYQI0S
- BKaNa5uG0epYt3Qwnne8EBvwbXDalgamrcoj4aQz7dl8WbjhZj7xOmzBtc95exqZtirPhLNORygDA9ND
- lRtOaNq4tskoFzfC1oVrdBIjEJo2X9sY1tJKxY1ZaaNMA2LT5nsurm21+S7hiRiURjyvxNQ3VnDaytxG
- EaLA1Y0LWyt1AhCdtjrRRoi1VzcmpJlCX9vC0+ZqG9e2DlbVjenop9Dpj08bbVM0O29c11qqdPYT0uZ5
- Pia4kVl5433XlWdC0nc5I220TVhu36haZ57ZyD/4KWnztI1h7ig8cLziBNQ69jlpo20XcTpxJE1HsUOf
- lDbHYzLcKoydY8M1OV5zU64zWWmjbcCVVCtbXtocj0rbgObKlS0xbbStiN19EF76qz73EgUPe2LaHF9K
- GbRU+3Onufi7s8e8RSt41FPTRtvK2N8JteW/1tMWYD7oE/89RG7a7PdUxi3b0fRNHLpURyOn8pyVVCxb
- dtrsT03b0h2+Z/qf+sNpI2wJap7x9LTRtkqON6Pv2T/+hsCIZTB/M5s8WvlpMz86gzeDZTf65c3w/mS8
- cpQ93hPSZr+48W1hCtMwtimB7WgxWkmsZZu/AVPSVvj5L8q4IcX7xitzOeMWrBikOWkrvQQXZX3dlCyD
- NWpMVC7jPiyZoFlpE7kniLEXosjO2Ht8x3UtVe0zPS1t5oVgHOfy5O1mxaA6i3bHSzJb8QM9MW3WU0Tb
- pvPm7SG3HoMf6oYRmqD6aZ6aNmPned+uMHIz+mx4kk+E7B1Zm8O0YSuP8ty0GQ8QbVslpm+rULVpbIOy
- dENmp81Ye4Z0oYZ942U4V4dDPD9ttnVhVldrEjgGZT7TaCy/naxImy1uXNxKqFs4BmQRy0gUeOOsSZsp
- boxuJXUSx1ysZTi6Ja7Sq9JmWSG+a5RkuXLHYxhqMLziimzVurRZzggv6OJyM8f2l9PoQrIybVA0Wjuu
- ZQhF2gAIIm0ABJE2AIJIGwBBpA2AINIGQBBpAyCItAEQRNoACCJtAASRNgCCSBsAQaQNgCDSBkAQaQMg
- iLQBEETaAAgibQAEkTYAgkgbAEGkDYAg0gZAEGkDIIi0ARBE2gAIIm0ABJE2AIJIGwBBpA2AINIGQBBp
- AyCItAEQRNoACCJtAASRNgCCSBsAQaQNgCDSBkAQaQMgiLQBEETaAAgibQAEkTYAgkgbAEGkDYAg0gZA
- EGkDIIi0ARBE2gAIIm0ABJE2AIJIGwA5P378HyuEmb0husDDAAAAAElFTkSuQmCC
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAAZ4AAADQCAIAAAC4O5DwAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAS
- cwAAEnMBjCK5BwAAC05JREFUeF7t2sGBG0cORmEn4PPmooCUxO7FGTgaJ+NgtE0OKZMeTTdQDVQBf7/v
- 4svuDLsK9boo6bcfACCHtAEQRNoACCJtAASRNgCCSBsAQaQNgCDSBkAQaQMgiLQBEETaAAgibQAEkTYA
- gkgbAEGkDYAg0gZAEGkDIIi0ARBE2gAIIm0ABJE2AIJIGwBBpA2AINIGQBBpAyCItAEQRNoACCJtAASR
- NgCCSBsAQaQNgCDSBkAQaQMgiLQBEETaAAgibQAEkTYAgkgbAEGkDYAg0pbqr++/Dfn259+PnwBhjEci
- 0hZndFBtvv/1+DXoifGYi7SdkzuvX+Gt3QTjsQ5pG/H3n98eU7QaL+uCGI8KSJtHnZn9NxJXAONRCWkz
- qTu0b/gmsgbjUdDKtB0PRIG9aDK1r1asmvsPlUSO2cXGo8WRfViXNsNQLL5GNxzbF3MX74Jpu+Z4HG90
- lZ1dlTbLXCwsW+7YHm5+2F+sTVvCa6UtvWr7q7N0PAy/vMberkmbZTSWrU/Y4OxyTtWJDzUlb9dJ25zx
- 2Hj2beZ4lD68L1akzfTOm3IgP5k2tzeD+z9yZUgftWukbep4bEYWacJ4WJZh/f7OT5tt6ReUbfbc3px6
- TOcQpy6pftpWjMdmfNcSx8O0Fqt3eHbabOs9fVVGXnUxAh7Vfujy1lU7bevGY3N2pTLGo+gxfjM5bbZl
- nrwkSwd3E3Odsk5wzuVNOG3G8fjP478ZAvYsejxsPy9n2Gymps24vFPXwzS4vz/+myTumNuOYcICq6bN
- tKDf/vff5Jdj0GpFjkfFw/xmYtqMb7+ZM2/5SN//sJ7az7toPvChD234reGLLJk203hsm25++BITEjUe
- Bc/zm2lpMy7EzJU43uNtFE2fe/9DW8Y3+rGPP3bsbzQf0adlE29mGo9NxwkJGY+CR/rVrLRZR3/aMhzu
- i3VuTZ/YMAWf3+hnHa554K9US5txPCz/y6oTEjAe1l2Pn22DOWkz7NuHWWtwtCfPz2Gf8ENHPyrlrB/9
- 0rD11kqbdTw2rSfk9HhYt33Fbk9Jm3nuw07avv3P87INsWU4+GlZ229+2jPMW/y0YtiNPAvWf0LOjYd5
- 3ycd7RcT0na0+z/Nmfb9j/P+GaKrsP/z8nZ/9/eGLLt5xJ/mbLafZzw2EhNyZjyKne4X+WkzD/2UZ9/d
- iX9/gv1tG5mzM0N0iuu5B5h3+Wn6pJt4l0llQk6Mx/4SvJp8cctOm/3BC876iQ3/QvxRKEIkbV5MSN0j
- npw2+8RXHPWEN+jujyRt3TAhG3vbpn7+1LQVfWYzBteMtH12nQmx7/7Ebc9MW/ey7T/A0CbtLwlp64YJ
- +eDY/mmPkJi2io/rEz9mu2vS+bSTtl+40IQUPOx5aetftqNn8A/a/s8ruwwGjt3+oJE2JuTJMQCTtj4r
- bfuvs3d1N+zoKXyf/OCntT7sV00bE/JUrm1JadMom+E57B8+8EcV5E7bh9bPfMeEPFVrW07aPINe+/V9
- 3GjT5z/+Mc1P+WDafur79EzIk2cGJjxLStp0ymYauaOHsCxH9WU4cjZtH1quAhPyYFqIp/y2ZaRNqWwb
- 8+N83i3z/7V72YLSdtdvLZiQD7XalpA2z5S3GGPXjo1oH7bQtN1N+MISiAn5UKpt8WlzDXmTCc4d3V7H
- +Nei03bTaV2YkLtKhz88bYpl26SNrsCN7SYjbZtGq8OE3BQ6/tFpcz1ar2OdcXo7XUx2JaVt02hImBBn
- 4FMfLjhtwmXbBL+Y2z3/jry0bS57uW84IXXaFpu2Qs3OEnWGWz7811LT1uuMX3xCytxuQtPmK1vbS8vp
- V7PSde0hOW3N1uzKE1ImAqFp881373vL6FkWu609paet33G/6oRUqUBk2nzPJHF18TyyaNQ+TEhbz5G5
- 3oQ4r6xpDx2Ytot8Hf21rydY7EG/8Hz+naeNqF/jw3+dCfFtdNrTB6bN90TSdxh87dyfQ13jRdFbkWtb
- XNoufWmDz4kbHO/E8py7m7SjcWkrcg1FE8N1o23VOa9tSS0IS1uRWyj6GP1qymuxuhLXtrC0cWmD39jV
- jekprsS1LSptXNowYuzmxvgUV+HaFpW2EldQNDR0cWN+ahNKW4kbKFoaaRsDVFuFHgSlzTmeTCb+Qdvk
- eP+cIePatiZtfJ/Ai5G2MUKlFQhCTNoqRBptjfxdAte20gp8jVuSNsYSb0baxuuxsgJFIG0oYOArKWmr
- zPuyStjNmLQVuH6is4G0MUSVXTVtvHDxbuAbKWmrjLQBd3wjFbM+CaQNFZA2Mc4NTbiDkzZUQNrEkDbg
- hrSJIW3ADWkTsz4JpA0V+NPG35CWRtqAG9KmhX+yC9wM/Ls23o+VOTc0owgxaSvwIOiMtIkhbcAN30fF
- OIuQ8Z6KSRt/2IYzuLSpKRAE0ob1uLSp8e1oym4GpY1vpFfyc7eDXlH+svFyrK1CD4LSVqHSyPLl5sbs
- I2WTU+CP2sLSVuFZEMOxlxFtGygbr8biKtx0otLmfBjSVtGKyDjfiXeUrbgSF52wtPmehuEsaX7bBn4j
- w1NeiRiEpY1rm4LJd6iRsDE69ZVoQVzauLYpGGnb4GYO/SrK1kCNFMSljWubhMHgeOdz6L624ZXYQI0S
- BKaNa5uG0epYt3Qwnne8EBvwbXDalgamrcoj4aQz7dl8WbjhZj7xOmzBtc95exqZtirPhLNORygDA9ND
- lRtOaNq4tskoFzfC1oVrdBIjEJo2X9sY1tJKxY1ZaaNMA2LT5nsurm21+S7hiRiURjyvxNQ3VnDaytxG
- EaLA1Y0LWyt1AhCdtjrRRoi1VzcmpJlCX9vC0+ZqG9e2DlbVjenop9Dpj08bbVM0O29c11qqdPYT0uZ5
- Pia4kVl5433XlWdC0nc5I220TVhu36haZ57ZyD/4KWnztI1h7ig8cLziBNQ69jlpo20XcTpxJE1HsUOf
- lDbHYzLcKoydY8M1OV5zU64zWWmjbcCVVCtbXtocj0rbgObKlS0xbbStiN19EF76qz73EgUPe2LaHF9K
- GbRU+3Onufi7s8e8RSt41FPTRtvK2N8JteW/1tMWYD7oE/89RG7a7PdUxi3b0fRNHLpURyOn8pyVVCxb
- dtrsT03b0h2+Z/qf+sNpI2wJap7x9LTRtkqON6Pv2T/+hsCIZTB/M5s8WvlpMz86gzeDZTf65c3w/mS8
- cpQ93hPSZr+48W1hCtMwtimB7WgxWkmsZZu/AVPSVvj5L8q4IcX7xitzOeMWrBikOWkrvQQXZX3dlCyD
- NWpMVC7jPiyZoFlpE7kniLEXosjO2Ht8x3UtVe0zPS1t5oVgHOfy5O1mxaA6i3bHSzJb8QM9MW3WU0Tb
- pvPm7SG3HoMf6oYRmqD6aZ6aNmPned+uMHIz+mx4kk+E7B1Zm8O0YSuP8ty0GQ8QbVslpm+rULVpbIOy
- dENmp81Ye4Z0oYZ942U4V4dDPD9ttnVhVldrEjgGZT7TaCy/naxImy1uXNxKqFs4BmQRy0gUeOOsSZsp
- boxuJXUSx1ysZTi6Ja7Sq9JmWSG+a5RkuXLHYxhqMLziimzVurRZzggv6OJyM8f2l9PoQrIybVA0Wjuu
- ZQhF2gAIIm0ABJE2AIJIGwBBpA2AINIGQBBpAyCItAEQRNoACCJtAASRNgCCSBsAQaQNgCDSBkAQaQMg
- iLQBEETaAAgibQAEkTYAgkgbAEGkDYAg0gZAEGkDIIi0ARBE2gAIIm0ABJE2AIJIGwBBpA2AINIGQBBp
- AyCItAEQRNoACCJtAASRNgCCSBsAQaQNgCDSBkAQaQMgiLQBEETaAAgibQAEkTYAgkgbAEGkDYAg0gZA
- EGkDIIi0ARBE2gAIIm0ABJE2AIJIGwA5P378HyuEmb0husDDAAAAAElFTkSuQmCC
-
-
-
\ No newline at end of file
diff --git a/ImageCatalogCS/App.config b/ImageCatalogCS/App.config
deleted file mode 100644
index 4bfa005..0000000
--- a/ImageCatalogCS/App.config
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/ImageCatalogCS/CreaImmagineSeparateThread.cs b/ImageCatalogCS/CreaImmagineSeparateThread.cs
deleted file mode 100644
index 4444736..0000000
--- a/ImageCatalogCS/CreaImmagineSeparateThread.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-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
deleted file mode 100644
index 9f801be..0000000
--- a/ImageCatalogCS/ExifReader.cs
+++ /dev/null
@@ -1,1166 +0,0 @@
-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
deleted file mode 100644
index 0e68384..0000000
--- a/ImageCatalogCS/FileHelper.cs
+++ /dev/null
@@ -1,173 +0,0 @@
-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
deleted file mode 100644
index ef71c58..0000000
--- a/ImageCatalogCS/ImageCatalog 3.csproj
+++ /dev/null
@@ -1,132 +0,0 @@
-
-
-
-
- Debug
- AnyCPU
- {D11ED7B0-93E8-4F38-A142-EED72D7EE8B5}
- WinExe
- Properties
- ImageCatalogCS
- ImageCatalogCS
- v4.8
- 512
- SAK
- SAK
- SAK
- SAK
-
-
-
- AnyCPU
- true
- full
- false
- bin\Debug\
- DEBUG;TRACE
- prompt
- 4
-
-
- AnyCPU
- pdbonly
- true
- bin\Release\
- TRACE
- prompt
- 4
-
-
- true
- bin\x64\Debug\
- DEBUG;TRACE
- full
- x64
- prompt
- MinimumRecommendedRules.ruleset
- true
-
-
- bin\x64\Release\
- TRACE
- true
- pdbonly
- x64
- prompt
- MinimumRecommendedRules.ruleset
- true
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Form
-
-
- AboutForm.cs
-
-
-
-
-
-
- Form
-
-
- MainForm.cs
-
-
-
-
-
-
-
-
- AboutForm.cs
-
-
- MainForm.cs
-
-
- ResXFileCodeGenerator
- Resources.Designer.cs
- Designer
-
-
- True
- Resources.resx
- True
-
-
- SettingsSingleFileGenerator
- Settings.Designer.cs
-
-
- True
- Settings.settings
- True
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/ImageCatalogCS/ImageCreator.cs b/ImageCatalogCS/ImageCreator.cs
deleted file mode 100644
index 3c03533..0000000
--- a/ImageCatalogCS/ImageCreator.cs
+++ /dev/null
@@ -1,1057 +0,0 @@
-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
deleted file mode 100644
index 54b8132..0000000
--- a/ImageCatalogCS/MainForm.Designer.cs
+++ /dev/null
@@ -1,1794 +0,0 @@
-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
deleted file mode 100644
index c11509f..0000000
--- a/ImageCatalogCS/MainForm.cs
+++ /dev/null
@@ -1,548 +0,0 @@
-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
deleted file mode 100644
index d5494e3..0000000
--- a/ImageCatalogCS/MainForm.resx
+++ /dev/null
@@ -1,123 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 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
deleted file mode 100644
index 9f930c8..0000000
--- a/ImageCatalogCS/PicSettings.cs
+++ /dev/null
@@ -1,92 +0,0 @@
-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
deleted file mode 100644
index 9c2ec36..0000000
--- a/ImageCatalogCS/Program.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-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
deleted file mode 100644
index 97f38c2..0000000
--- a/ImageCatalogCS/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-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
deleted file mode 100644
index 6af1fd8..0000000
--- a/ImageCatalogCS/Properties/Resources.Designer.cs
+++ /dev/null
@@ -1,63 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Runtime Version:4.0.30319.42000
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-namespace ImageCatalogCS.Properties {
- using System;
-
-
- ///
- /// 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", "17.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 (object.ReferenceEquals(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
deleted file mode 100644
index af7dbeb..0000000
--- a/ImageCatalogCS/Properties/Resources.resx
+++ /dev/null
@@ -1,117 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 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
deleted file mode 100644
index 0e29f59..0000000
--- a/ImageCatalogCS/Properties/Settings.Designer.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Runtime Version:4.0.30319.42000
-//
-// 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", "17.11.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
deleted file mode 100644
index 3964565..0000000
--- a/ImageCatalogCS/Properties/Settings.settings
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/ImageCatalogCS/Temperature.cs b/ImageCatalogCS/Temperature.cs
deleted file mode 100644
index a56ed82..0000000
--- a/ImageCatalogCS/Temperature.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-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
deleted file mode 100644
index 2443542..0000000
--- a/ImageCatalogCS/XMLSettings.cs
+++ /dev/null
@@ -1,208 +0,0 @@
-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
deleted file mode 100644
index 005b30c..0000000
--- a/ImageCatalogCS/XYThreadPool.cs
+++ /dev/null
@@ -1,251 +0,0 @@
-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/ImageCatalogParallel/App.config b/ImageCatalogParallel/App.config
deleted file mode 100644
index 193aecc..0000000
--- a/ImageCatalogParallel/App.config
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/ImageCatalogParallel/Form1.Designer.cs b/ImageCatalogParallel/Form1.Designer.cs
deleted file mode 100644
index d598f89..0000000
--- a/ImageCatalogParallel/Form1.Designer.cs
+++ /dev/null
@@ -1,1809 +0,0 @@
-
-namespace ImageCatalogParallel
-{
- partial class Form1
- {
- ///
- /// 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.TabPage1 = new System.Windows.Forms.TabPage();
- this.Panel1 = new System.Windows.Forms.Panel();
- this.CheckBox18 = new System.Windows.Forms.CheckBox();
- this.CheckBox4 = new System.Windows.Forms.CheckBox();
- this.CheckBox12 = new System.Windows.Forms.CheckBox();
- 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.Label37 = new System.Windows.Forms.Label();
- this.Label38 = new System.Windows.Forms.Label();
- this.Label45 = new System.Windows.Forms.Label();
- this.TextBox32 = new System.Windows.Forms.TextBox();
- this.TextBox26 = new System.Windows.Forms.TextBox();
- this.TextBox27 = new System.Windows.Forms.TextBox();
- this.Label39 = new System.Windows.Forms.Label();
- this.CheckBox15 = new System.Windows.Forms.CheckBox();
- 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.TextBox28 = new System.Windows.Forms.TextBox();
- this.TabPage2 = new System.Windows.Forms.TabPage();
- this.GroupBox2 = new System.Windows.Forms.GroupBox();
- this.Label27 = new System.Windows.Forms.Label();
- this.Button7 = new System.Windows.Forms.Button();
- this.Button5 = new System.Windows.Forms.Button();
- 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.Label19 = new System.Windows.Forms.Label();
- this.Label18 = new System.Windows.Forms.Label();
- this.lblFotoTotaliNum = new System.Windows.Forms.Label();
- this.Label10 = new System.Windows.Forms.Label();
- 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.btnCreaCatalogoAsync = new System.Windows.Forms.Button();
- this.Label20 = new System.Windows.Forms.Label();
- this.btnCreaCatalogo = new System.Windows.Forms.Button();
- this.Label24 = new System.Windows.Forms.Label();
- this.Label22 = new System.Windows.Forms.Label();
- this.Label23 = new System.Windows.Forms.Label();
- 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.GroupBox6 = new System.Windows.Forms.GroupBox();
- this.Button4 = new System.Windows.Forms.Button();
- this.TabPage4 = new System.Windows.Forms.TabPage();
- this.Label13 = new System.Windows.Forms.Label();
- 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.txtFilePerCartella = new System.Windows.Forms.TextBox();
- this.GroupBox8 = new System.Windows.Forms.GroupBox();
- this.chkCreaSottocartelle = new System.Windows.Forms.CheckBox();
- this.Label32 = new System.Windows.Forms.Label();
- this.chkAggiornaSottodirectory = new System.Windows.Forms.CheckBox();
- this.GroupBox3 = new System.Windows.Forms.GroupBox();
- 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.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.Panel3 = new System.Windows.Forms.Panel();
- this.rdbNuovoMetodo = new System.Windows.Forms.RadioButton();
- this.rdbVecchioMetodo = new System.Windows.Forms.RadioButton();
- 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.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.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.Button6 = new System.Windows.Forms.Button();
- this.TabPage1.SuspendLayout();
- this.Panel1.SuspendLayout();
- this.GroupBox1.SuspendLayout();
- this.Panel2.SuspendLayout();
- this.TabPage2.SuspendLayout();
- this.GroupBox2.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.PictureBox2)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.PictureBox1)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.PictureBox3)).BeginInit();
- this.GroupBox6.SuspendLayout();
- this.TabPage4.SuspendLayout();
- this.GroupBox8.SuspendLayout();
- this.GroupBox3.SuspendLayout();
- this.TabControl1.SuspendLayout();
- this.TabPage5.SuspendLayout();
- this.GroupBox11.SuspendLayout();
- this.Panel3.SuspendLayout();
- this.GroupBox7.SuspendLayout();
- this.TabPage3.SuspendLayout();
- this.GroupBox10.SuspendLayout();
- this.GroupBox9.SuspendLayout();
- this.GroupBox5.SuspendLayout();
- this.GroupBox4.SuspendLayout();
- this.SuspendLayout();
- //
- // TabPage1
- //
- this.TabPage1.Controls.Add(this.Panel1);
- this.TabPage1.Controls.Add(this.GroupBox1);
- 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, 351);
- this.TabPage1.TabIndex = 0;
- this.TabPage1.Text = "Miniature";
- this.TabPage1.UseVisualStyleBackColor = true;
- //
- // Panel1
- //
- this.Panel1.Controls.Add(this.CheckBox18);
- this.Panel1.Controls.Add(this.CheckBox4);
- this.Panel1.Controls.Add(this.CheckBox12);
- this.Panel1.Location = new System.Drawing.Point(52, 236);
- this.Panel1.Name = "Panel1";
- this.Panel1.Size = new System.Drawing.Size(304, 73);
- this.Panel1.TabIndex = 26;
- this.Panel1.Visible = false;
- //
- // CheckBox18
- //
- this.CheckBox18.AutoSize = true;
- this.CheckBox18.Location = new System.Drawing.Point(140, 3);
- this.CheckBox18.Name = "CheckBox18";
- this.CheckBox18.Size = new System.Drawing.Size(84, 17);
- this.CheckBox18.TabIndex = 36;
- this.CheckBox18.Text = "Numero foto";
- this.CheckBox18.UseVisualStyleBackColor = true;
- //
- // CheckBox4
- //
- this.CheckBox4.ForeColor = System.Drawing.Color.Black;
- this.CheckBox4.Location = new System.Drawing.Point(10, 3);
- this.CheckBox4.Name = "CheckBox4";
- this.CheckBox4.Size = new System.Drawing.Size(104, 17);
- this.CheckBox4.TabIndex = 34;
- this.CheckBox4.Text = "Aggiungi scritta";
- //
- // CheckBox12
- //
- this.CheckBox12.ForeColor = System.Drawing.Color.Black;
- this.CheckBox12.Location = new System.Drawing.Point(10, 19);
- this.CheckBox12.Name = "CheckBox12";
- this.CheckBox12.Size = new System.Drawing.Size(104, 21);
- this.CheckBox12.TabIndex = 35;
- this.CheckBox12.Text = "Aggiungi orario";
- //
- // 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.Controls.Add(this.CheckBox1);
- this.GroupBox1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(192)))));
- this.GroupBox1.Location = new System.Drawing.Point(6, 5);
- 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(72, 16);
- this.CheckBox1.Name = "CheckBox1";
- this.CheckBox1.Size = new System.Drawing.Size(104, 24);
- this.CheckBox1.TabIndex = 5;
- this.CheckBox1.Text = "Crea miniature";
- //
- // 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";
- //
- // 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";
- //
- // 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";
- //
- // 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";
- //
- // 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, 156);
- 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, 156);
- 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, 156);
- 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, 156);
- 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, 108);
- 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, 156);
- 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, 108);
- this.Label9.Name = "Label9";
- this.Label9.Size = new System.Drawing.Size(110, 13);
- this.Label9.TabIndex = 19;
- this.Label9.Text = "Trasparenza (0-100%)";
- //
- // 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";
- //
- // 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";
- //
- // Label27
- //
- this.Label27.Location = new System.Drawing.Point(591, 378);
- this.Label27.Name = "Label27";
- this.Label27.Size = new System.Drawing.Size(145, 20);
- this.Label27.TabIndex = 78;
- this.Label27.Text = "Versione 2.2 2021";
- this.Label27.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
- //
- // Button7
- //
- this.Button7.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.Button7.Location = new System.Drawing.Point(539, 120);
- this.Button7.Name = "Button7";
- this.Button7.Size = new System.Drawing.Size(197, 40);
- this.Button7.TabIndex = 77;
- this.Button7.Text = "stop creazione";
- //
- // Button5
- //
- this.Button5.Font = new System.Drawing.Font("Microsoft Sans Serif", 11F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.Button5.Location = new System.Drawing.Point(539, 43);
- this.Button5.Name = "Button5";
- this.Button5.Size = new System.Drawing.Size(197, 32);
- this.Button5.TabIndex = 76;
- this.Button5.Text = "Salva impostazioni";
- //
- // 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";
- //
- // 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(544, 275);
- this.Label19.Name = "Label19";
- this.Label19.Size = new System.Drawing.Size(80, 16);
- this.Label19.TabIndex = 74;
- 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(648, 294);
- this.Label18.Name = "Label18";
- this.Label18.Size = new System.Drawing.Size(19, 20);
- this.Label18.TabIndex = 73;
- 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(648, 275);
- this.lblFotoTotaliNum.Name = "lblFotoTotaliNum";
- this.lblFotoTotaliNum.Size = new System.Drawing.Size(19, 20);
- this.lblFotoTotaliNum.TabIndex = 72;
- this.lblFotoTotaliNum.Text = "0";
- //
- // Label10
- //
- this.Label10.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.Label10.Location = new System.Drawing.Point(539, 163);
- this.Label10.Name = "Label10";
- this.Label10.Size = new System.Drawing.Size(197, 72);
- this.Label10.TabIndex = 71;
- this.Label10.Text = "file";
- //
- // 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";
- //
- // btnCreaCatalogoAsync
- //
- this.btnCreaCatalogoAsync.Location = new System.Drawing.Point(647, 78);
- this.btnCreaCatalogoAsync.Name = "btnCreaCatalogoAsync";
- this.btnCreaCatalogoAsync.Size = new System.Drawing.Size(89, 38);
- this.btnCreaCatalogoAsync.TabIndex = 83;
- this.btnCreaCatalogoAsync.Text = "Crea 2";
- this.btnCreaCatalogoAsync.UseVisualStyleBackColor = true;
- //
- // 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(544, 294);
- this.Label20.Name = "Label20";
- this.Label20.Size = new System.Drawing.Size(104, 16);
- this.Label20.TabIndex = 75;
- this.Label20.Text = "foto generate:";
- //
- // btnCreaCatalogo
- //
- this.btnCreaCatalogo.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.btnCreaCatalogo.Location = new System.Drawing.Point(539, 77);
- this.btnCreaCatalogo.Name = "btnCreaCatalogo";
- this.btnCreaCatalogo.Size = new System.Drawing.Size(107, 39);
- this.btnCreaCatalogo.TabIndex = 69;
- this.btnCreaCatalogo.Text = "crea catalogo";
- //
- // 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;
- //
- // 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;
- //
- // 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";
- //
- // 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 = "...";
- //
- // 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;
- //
- // Label13
- //
- this.Label13.AutoSize = true;
- this.Label13.ForeColor = System.Drawing.Color.Black;
- this.Label13.Location = new System.Drawing.Point(16, 132);
- this.Label13.Name = "Label13";
- this.Label13.Size = new System.Drawing.Size(52, 13);
- this.Label13.TabIndex = 29;
- this.Label13.Text = "Posizione";
- //
- // 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";
- //
- // 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";
- //
- // 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";
- //
- // 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";
- //
- // 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";
- //
- // 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";
- //
- // 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";
- //
- // 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";
- //
- // ProgressBar1
- //
- this.ProgressBar1.Location = new System.Drawing.Point(539, 243);
- this.ProgressBar1.Name = "ProgressBar1";
- this.ProgressBar1.Size = new System.Drawing.Size(197, 23);
- this.ProgressBar1.TabIndex = 82;
- //
- // CheckBox22
- //
- this.CheckBox22.AutoSize = true;
- this.CheckBox22.Location = new System.Drawing.Point(544, 358);
- this.CheckBox22.Name = "CheckBox22";
- this.CheckBox22.Size = new System.Drawing.Size(104, 17);
- this.CheckBox22.TabIndex = 81;
- this.CheckBox22.Text = "Arresta il sistema";
- this.CheckBox22.UseVisualStyleBackColor = true;
- //
- // Label43
- //
- this.Label43.AutoSize = true;
- this.Label43.Location = new System.Drawing.Point(541, 342);
- this.Label43.Name = "Label43";
- this.Label43.Size = new System.Drawing.Size(25, 13);
- this.Label43.TabIndex = 80;
- 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, 12);
- this.TabControl1.Name = "TabControl1";
- this.TabControl1.SelectedIndex = 0;
- this.TabControl1.Size = new System.Drawing.Size(526, 377);
- this.TabControl1.TabIndex = 79;
- //
- // 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(518, 351);
- this.TabPage5.TabIndex = 4;
- this.TabPage5.Text = "Generale";
- this.TabPage5.UseVisualStyleBackColor = true;
- //
- // GroupBox11
- //
- this.GroupBox11.Controls.Add(this.Panel3);
- 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)";
- //
- // Panel3
- //
- this.Panel3.Controls.Add(this.rdbNuovoMetodo);
- this.Panel3.Controls.Add(this.rdbVecchioMetodo);
- this.Panel3.Location = new System.Drawing.Point(7, 73);
- this.Panel3.Name = "Panel3";
- this.Panel3.Size = new System.Drawing.Size(178, 53);
- this.Panel3.TabIndex = 4;
- //
- // rdbNuovoMetodo
- //
- this.rdbNuovoMetodo.AutoSize = true;
- this.rdbNuovoMetodo.Checked = true;
- this.rdbNuovoMetodo.Location = new System.Drawing.Point(8, 28);
- this.rdbNuovoMetodo.Name = "rdbNuovoMetodo";
- this.rdbNuovoMetodo.Size = new System.Drawing.Size(95, 17);
- this.rdbNuovoMetodo.TabIndex = 1;
- this.rdbNuovoMetodo.TabStop = true;
- this.rdbNuovoMetodo.Text = "Nuovo metodo";
- this.rdbNuovoMetodo.UseVisualStyleBackColor = true;
- //
- // rdbVecchioMetodo
- //
- this.rdbVecchioMetodo.AutoSize = true;
- this.rdbVecchioMetodo.Location = new System.Drawing.Point(8, 4);
- this.rdbVecchioMetodo.Name = "rdbVecchioMetodo";
- this.rdbVecchioMetodo.Size = new System.Drawing.Size(102, 17);
- this.rdbVecchioMetodo.TabIndex = 0;
- this.rdbVecchioMetodo.Text = "Vecchio metodo";
- this.rdbVecchioMetodo.UseVisualStyleBackColor = true;
- //
- // 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(111, 13);
- this.Label8.TabIndex = 3;
- this.Label8.Text = "Chunk Size (0 = MAX)";
- //
- // 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 = "0";
- //
- // 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(108, 13);
- this.Label7.TabIndex = 1;
- this.Label7.Text = "Threads (0 = CPU *2)";
- //
- // 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 = "0";
- //
- // 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.CheckBox2);
- this.TabPage3.Controls.Add(this.GroupBox10);
- this.TabPage3.Controls.Add(this.GroupBox9);
- this.TabPage3.Controls.Add(this.GroupBox5);
- this.TabPage3.Controls.Add(this.GroupBox4);
- 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, 351);
- 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;
- //
- // 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(316, 78);
- 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(316, 31);
- 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(6, 31);
- 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(6, 157);
- this.GroupBox4.Name = "GroupBox4";
- this.GroupBox4.Size = new System.Drawing.Size(496, 186);
- this.GroupBox4.TabIndex = 36;
- this.GroupBox4.TabStop = false;
- this.GroupBox4.Text = "Testo da applicare";
- //
- // ComboBox1
- //
- this.ComboBox1.Location = new System.Drawing.Point(72, 132);
- 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, 132);
- 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, 132);
- 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, 108);
- 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, 108);
- this.Label15.Name = "Label15";
- this.Label15.Size = new System.Drawing.Size(75, 13);
- this.Label15.TabIndex = 32;
- this.Label15.Text = "Margine (pixel)";
- //
- // Button6
- //
- this.Button6.Font = new System.Drawing.Font("Microsoft Sans Serif", 11F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.Button6.Location = new System.Drawing.Point(539, 12);
- this.Button6.Name = "Button6";
- this.Button6.Size = new System.Drawing.Size(197, 32);
- this.Button6.TabIndex = 70;
- this.Button6.Text = "Carica impostazioni";
- //
- // Form1
- //
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(800, 450);
- this.Controls.Add(this.Label27);
- this.Controls.Add(this.Button7);
- this.Controls.Add(this.Button5);
- this.Controls.Add(this.Label19);
- this.Controls.Add(this.Label18);
- this.Controls.Add(this.lblFotoTotaliNum);
- this.Controls.Add(this.Label10);
- this.Controls.Add(this.btnCreaCatalogoAsync);
- this.Controls.Add(this.Label20);
- this.Controls.Add(this.btnCreaCatalogo);
- this.Controls.Add(this.ProgressBar1);
- this.Controls.Add(this.CheckBox22);
- this.Controls.Add(this.Label43);
- this.Controls.Add(this.TabControl1);
- this.Controls.Add(this.Button6);
- this.Name = "Form1";
- this.Text = "Form1";
- this.TabPage1.ResumeLayout(false);
- this.Panel1.ResumeLayout(false);
- this.Panel1.PerformLayout();
- this.GroupBox1.ResumeLayout(false);
- this.GroupBox1.PerformLayout();
- this.Panel2.ResumeLayout(false);
- this.Panel2.PerformLayout();
- this.TabPage2.ResumeLayout(false);
- this.GroupBox2.ResumeLayout(false);
- this.GroupBox2.PerformLayout();
- ((System.ComponentModel.ISupportInitialize)(this.PictureBox2)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.PictureBox1)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.PictureBox3)).EndInit();
- this.GroupBox6.ResumeLayout(false);
- this.GroupBox6.PerformLayout();
- this.TabPage4.ResumeLayout(false);
- this.GroupBox8.ResumeLayout(false);
- this.GroupBox8.PerformLayout();
- this.GroupBox3.ResumeLayout(false);
- this.GroupBox3.PerformLayout();
- this.TabControl1.ResumeLayout(false);
- this.TabPage5.ResumeLayout(false);
- this.GroupBox11.ResumeLayout(false);
- this.GroupBox11.PerformLayout();
- this.Panel3.ResumeLayout(false);
- this.Panel3.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.ResumeLayout(false);
- this.PerformLayout();
-
- }
-
- #endregion
-
- internal System.Windows.Forms.TabPage TabPage1;
- internal System.Windows.Forms.Panel Panel1;
- internal System.Windows.Forms.CheckBox CheckBox18;
- internal System.Windows.Forms.CheckBox CheckBox4;
- internal System.Windows.Forms.CheckBox CheckBox12;
- 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.Label Label37;
- internal System.Windows.Forms.Label Label38;
- internal System.Windows.Forms.Label Label45;
- internal System.Windows.Forms.TextBox TextBox32;
- internal System.Windows.Forms.TextBox TextBox26;
- internal System.Windows.Forms.TextBox TextBox27;
- internal System.Windows.Forms.Label Label39;
- internal System.Windows.Forms.CheckBox CheckBox15;
- 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.TextBox TextBox28;
- internal System.Windows.Forms.TabPage TabPage2;
- internal System.Windows.Forms.GroupBox GroupBox2;
- internal System.Windows.Forms.Label Label27;
- internal System.Windows.Forms.Button Button7;
- internal System.Windows.Forms.Button Button5;
- 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.Label Label19;
- internal System.Windows.Forms.Label Label18;
- internal System.Windows.Forms.Label lblFotoTotaliNum;
- internal System.Windows.Forms.Label Label10;
- 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.Button btnCreaCatalogoAsync;
- internal System.Windows.Forms.Label Label20;
- internal System.Windows.Forms.Button btnCreaCatalogo;
- internal System.Windows.Forms.Label Label24;
- internal System.Windows.Forms.Label Label22;
- internal System.Windows.Forms.Label Label23;
- 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.GroupBox GroupBox6;
- internal System.Windows.Forms.Button Button4;
- internal System.Windows.Forms.TabPage TabPage4;
- internal System.Windows.Forms.Label Label13;
- 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.TextBox txtFilePerCartella;
- internal System.Windows.Forms.GroupBox GroupBox8;
- internal System.Windows.Forms.CheckBox chkCreaSottocartelle;
- internal System.Windows.Forms.Label Label32;
- internal System.Windows.Forms.CheckBox chkAggiornaSottodirectory;
- internal System.Windows.Forms.GroupBox GroupBox3;
- 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.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.Panel Panel3;
- internal System.Windows.Forms.RadioButton rdbNuovoMetodo;
- internal System.Windows.Forms.RadioButton rdbVecchioMetodo;
- 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 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.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.Button Button6;
- }
-}
-
diff --git a/ImageCatalogParallel/Form1.cs b/ImageCatalogParallel/Form1.cs
deleted file mode 100644
index 458f104..0000000
--- a/ImageCatalogParallel/Form1.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-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 ImageCatalogParallel
-{
- public partial class Form1 : Form
- {
- public Form1()
- {
- InitializeComponent();
- }
- }
-}
diff --git a/ImageCatalogParallel/Form1.resx b/ImageCatalogParallel/Form1.resx
deleted file mode 100644
index 1af7de1..0000000
--- a/ImageCatalogParallel/Form1.resx
+++ /dev/null
@@ -1,120 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 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
-
-
\ No newline at end of file
diff --git a/ImageCatalogParallel/ImageCatalogParallel.csproj b/ImageCatalogParallel/ImageCatalogParallel.csproj
deleted file mode 100644
index b507943..0000000
--- a/ImageCatalogParallel/ImageCatalogParallel.csproj
+++ /dev/null
@@ -1,83 +0,0 @@
-
-
-
-
- Debug
- AnyCPU
- {0F42DA5C-2788-48BD-BACA-01625C3CFFBB}
- WinExe
- ImageCatalogParallel
- ImageCatalogParallel
- v4.8
- 512
- true
- true
-
-
- AnyCPU
- true
- full
- false
- bin\Debug\
- DEBUG;TRACE
- prompt
- 4
-
-
- AnyCPU
- pdbonly
- true
- bin\Release\
- TRACE
- prompt
- 4
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Form
-
-
- Form1.cs
-
-
-
-
- Form1.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/ImageCatalogParallel/Program.cs b/ImageCatalogParallel/Program.cs
deleted file mode 100644
index 0a1fd3d..0000000
--- a/ImageCatalogParallel/Program.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-
-namespace ImageCatalogParallel
-{
- static class Program
- {
- ///
- /// The main entry point for the application.
- ///
- [STAThread]
- static void Main()
- {
- Application.EnableVisualStyles();
- Application.SetCompatibleTextRenderingDefault(false);
- Application.Run(new Form1());
- }
- }
-}
diff --git a/ImageCatalogParallel/Properties/AssemblyInfo.cs b/ImageCatalogParallel/Properties/AssemblyInfo.cs
deleted file mode 100644
index 757c842..0000000
--- a/ImageCatalogParallel/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-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("ImageCatalogParallel")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("ImageCatalogParallel")]
-[assembly: AssemblyCopyright("Copyright © 2021")]
-[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("0f42da5c-2788-48bd-baca-01625c3cffbb")]
-
-// 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/ImageCatalogParallel/Properties/Resources.Designer.cs b/ImageCatalogParallel/Properties/Resources.Designer.cs
deleted file mode 100644
index a23847e..0000000
--- a/ImageCatalogParallel/Properties/Resources.Designer.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Runtime Version:4.0.30319.42000
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-
-namespace ImageCatalogParallel.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("ImageCatalogParallel.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/ImageCatalogParallel/Properties/Resources.resx b/ImageCatalogParallel/Properties/Resources.resx
deleted file mode 100644
index af7dbeb..0000000
--- a/ImageCatalogParallel/Properties/Resources.resx
+++ /dev/null
@@ -1,117 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 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/ImageCatalogParallel/Properties/Settings.Designer.cs b/ImageCatalogParallel/Properties/Settings.Designer.cs
deleted file mode 100644
index 28069fb..0000000
--- a/ImageCatalogParallel/Properties/Settings.Designer.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Runtime Version:4.0.30319.42000
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-
-namespace ImageCatalogParallel.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/ImageCatalogParallel/Properties/Settings.settings b/ImageCatalogParallel/Properties/Settings.settings
deleted file mode 100644
index 3964565..0000000
--- a/ImageCatalogParallel/Properties/Settings.settings
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/MaddoLibrary b/MaddoLibrary
deleted file mode 160000
index 5987cc2..0000000
--- a/MaddoLibrary
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 5987cc26521d839bf81bdaab19d101488294da19
diff --git a/MaddoShared.Benchmarks/.gitignore b/MaddoShared.Benchmarks/.gitignore
new file mode 100644
index 0000000..28b2fd7
--- /dev/null
+++ b/MaddoShared.Benchmarks/.gitignore
@@ -0,0 +1,25 @@
+# BenchmarkDotNet artifacts
+BenchmarkDotNet.Artifacts/
+
+# Test images generated during benchmarks
+TestImages/
+
+# Build outputs
+bin/
+obj/
+
+# User-specific files
+*.suo
+*.user
+*.userosscache
+*.sln.docstates
+
+# Results and logs
+*.log
+*.html
+*.csv
+results/
+
+# Temporary files
+*.tmp
+*.temp
diff --git a/MaddoShared.Benchmarks/BenchmarkConfig.cs b/MaddoShared.Benchmarks/BenchmarkConfig.cs
new file mode 100644
index 0000000..182a392
--- /dev/null
+++ b/MaddoShared.Benchmarks/BenchmarkConfig.cs
@@ -0,0 +1,91 @@
+using BenchmarkDotNet.Columns;
+using BenchmarkDotNet.Configs;
+using BenchmarkDotNet.Diagnosers;
+using BenchmarkDotNet.Engines;
+using BenchmarkDotNet.Exporters;
+using BenchmarkDotNet.Exporters.Csv;
+using BenchmarkDotNet.Jobs;
+using BenchmarkDotNet.Loggers;
+using BenchmarkDotNet.Toolchains.InProcess.Emit;
+
+namespace MaddoShared.Benchmarks;
+
+///
+/// InProcess configuration for benchmarks requiring Windows-specific APIs
+/// This avoids the net10.0-windows vs net10.0 compatibility issue
+///
+public class InProcessConfig : ManualConfig
+{
+ public InProcessConfig()
+ {
+ AddLogger(ConsoleLogger.Default);
+ AddExporter(HtmlExporter.Default);
+ AddExporter(MarkdownExporter.GitHub);
+ AddExporter(CsvExporter.Default);
+ AddDiagnoser(MemoryDiagnoser.Default);
+
+ // Add job with InProcess toolchain
+ AddJob(Job.Default
+ .WithToolchain(InProcessEmitToolchain.Instance)
+ .WithWarmupCount(1)
+ .WithIterationCount(3));
+
+ // Configuration options
+ WithOptions(ConfigOptions.DisableOptimizationsValidator);
+ WithOptions(ConfigOptions.KeepBenchmarkFiles);
+ }
+}
+
+///
+/// Custom configuration for image processing benchmarks
+/// Uses InProcess toolchain to avoid net10.0-windows compatibility issues
+///
+public class BenchmarkConfig : ManualConfig
+{
+ public BenchmarkConfig()
+ {
+ // Add console logger
+ AddLogger(ConsoleLogger.Default);
+
+ // Add exporters for different formats
+ AddExporter(HtmlExporter.Default);
+ AddExporter(MarkdownExporter.GitHub);
+ AddExporter(CsvExporter.Default);
+ AddExporter(RPlotExporter.Default);
+
+ // Add diagnosers
+ AddDiagnoser(MemoryDiagnoser.Default);
+ AddDiagnoser(ThreadingDiagnoser.Default);
+
+ // Add columns
+ AddColumn(StatisticColumn.Mean);
+ AddColumn(StatisticColumn.StdDev);
+ AddColumn(StatisticColumn.Error);
+ AddColumn(StatisticColumn.Min);
+ AddColumn(StatisticColumn.Max);
+ AddColumn(StatisticColumn.Median);
+ AddColumn(BaselineRatioColumn.RatioMean);
+
+ // Customize jobs with InProcess toolchain for Windows compatibility
+ AddJob(Job.Default
+ .WithToolchain(InProcessEmitToolchain.Instance)
+ .WithWarmupCount(1)
+ .WithIterationCount(3)
+ .WithId("Quick"));
+
+ AddJob(Job.Default
+ .WithToolchain(InProcessEmitToolchain.Instance)
+ .WithWarmupCount(2)
+ .WithIterationCount(5)
+ .WithId("Standard"));
+ }
+
+ ///
+ /// Fast configuration for development and quick tests
+ ///
+ public static IConfig Fast => new ManualConfig()
+ .AddLogger(ConsoleLogger.Default)
+ .AddExporter(MarkdownExporter.GitHub)
+ .AddDiagnoser(MemoryDiagnoser.Default)
+ .AddJob(Job.Dry.WithToolchain(InProcessEmitToolchain.Instance)); // Very fast, but less accurate
+}
diff --git a/MaddoShared.Benchmarks/ChunkSizeBenchmarks.cs b/MaddoShared.Benchmarks/ChunkSizeBenchmarks.cs
new file mode 100644
index 0000000..390799d
--- /dev/null
+++ b/MaddoShared.Benchmarks/ChunkSizeBenchmarks.cs
@@ -0,0 +1,130 @@
+using System;
+using System.Collections.Concurrent;
+using System.IO;
+using System.Threading;
+using System.Threading.Tasks;
+using BenchmarkDotNet.Attributes;
+using BenchmarkDotNet.Configs;
+using BenchmarkDotNet.Engines;
+using BenchmarkDotNet.Jobs;
+using BenchmarkDotNet.Toolchains.InProcess.Emit;
+using MaddoShared.Benchmarks.Helpers;
+using Microsoft.Extensions.Logging;
+
+namespace MaddoShared.Benchmarks;
+
+///
+/// Benchmarks focused on different chunk sizes for parallel processing
+///
+[MemoryDiagnoser]
+[Config(typeof(InProcessConfig))]
+public class ChunkSizeBenchmarks
+{
+ private string _sourceDirectory;
+ private string _destinationDirectory;
+ private ImageCreationService _imageCreationStuff;
+ private PicSettings _picSettings;
+
+ [Params(100)]
+ public int ImageCount { get; set; }
+
+ [Params(0, 5, 10, 20, 50)]
+ public int ChunkSize { get; set; }
+
+ [GlobalSetup]
+ public void Setup()
+ {
+ var tempBase = Path.Combine(Path.GetTempPath(), "ChunkBenchmarks", Guid.NewGuid().ToString());
+ _sourceDirectory = Path.Combine(tempBase, "Source");
+ _destinationDirectory = Path.Combine(tempBase, "Destination");
+
+ Directory.CreateDirectory(_sourceDirectory);
+ Directory.CreateDirectory(_destinationDirectory);
+
+ Console.WriteLine($"Generating {ImageCount} test images for chunk size testing...");
+ TestImageGenerator.GenerateTestImages(_sourceDirectory, ImageCount, width: 2000, height: 1500);
+
+ var loggerFactory = LoggerFactory.Create(builder =>
+ {
+ builder.SetMinimumLevel(LogLevel.Warning);
+ });
+
+ var logger = loggerFactory.CreateLogger();
+ var imageCreatorLogger = loggerFactory.CreateLogger();
+
+ _picSettings = new PicSettings
+ {
+ DirectorySorgente = _sourceDirectory,
+ DirectoryDestinazione = _destinationDirectory,
+ DimStandard = 800,
+ DimStandardMiniatura = 200,
+ LarghezzaBig = 1024,
+ AltezzaBig = 768,
+ LarghezzaSmall = 200,
+ AltezzaSmall = 150,
+ CreaMiniature = true,
+ AggiungiScritteMiniature = false,
+ UsaForzaJpg = true,
+ UsaRotazioneAutomatica = true,
+ LogoAggiungi = false,
+ FotoGrandeDimOrigina = false,
+ TestoNome = false,
+ NomeData = false,
+ Suffisso = "_small",
+ Margine = 10,
+ Trasparenza = 100
+ };
+
+ var imageCreatorService = new ImageCreatorImageSharp(_picSettings, imageCreatorLogger);
+ _imageCreationStuff = new ImageCreationService(logger, _picSettings, imageCreatorService);
+ }
+
+ [GlobalCleanup]
+ public void Cleanup()
+ {
+ try
+ {
+ var tempBase = Path.GetDirectoryName(_sourceDirectory);
+ if (Directory.Exists(tempBase))
+ {
+ Directory.Delete(tempBase, recursive: true);
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine($"Cleanup error: {ex.Message}");
+ }
+ }
+
+ [IterationSetup]
+ public void IterationSetup()
+ {
+ if (Directory.Exists(_destinationDirectory))
+ {
+ Directory.Delete(_destinationDirectory, recursive: true);
+ }
+ Directory.CreateDirectory(_destinationDirectory);
+ }
+
+ [Benchmark]
+ public async Task ProcessWithVariableChunkSize()
+ {
+ var options = new ImageCreationService.Options
+ {
+ SourcePath = _sourceDirectory,
+ DestinationPath = _destinationDirectory,
+ MaxThreads = Environment.ProcessorCount,
+ ChunksSize = ChunkSize,
+ LinearExecution = false,
+ AggiornaSottodirectory = false,
+ CreaSottocartelle = false,
+ FilePerCartella = 100,
+ SuffissoCartelle = "",
+ CifreContatore = 4,
+ NumerazioneType = NumerazioneType.Progressiva
+ };
+
+ var results = new ConcurrentBag();
+ await _imageCreationStuff.ProcessImagesParallel(options, results, null, CancellationToken.None);
+ }
+}
diff --git a/MaddoShared.Benchmarks/Helpers/TestImageGenerator.cs b/MaddoShared.Benchmarks/Helpers/TestImageGenerator.cs
new file mode 100644
index 0000000..5630655
--- /dev/null
+++ b/MaddoShared.Benchmarks/Helpers/TestImageGenerator.cs
@@ -0,0 +1,90 @@
+using System;
+using System.IO;
+using SixLabors.ImageSharp;
+using SixLabors.ImageSharp.Formats.Jpeg;
+using SixLabors.ImageSharp.PixelFormats;
+
+namespace MaddoShared.Benchmarks.Helpers;
+
+///
+/// Helper class to generate test images for benchmarking.
+///
+public static class TestImageGenerator
+{
+ public static void GenerateTestImages(
+ string outputDirectory,
+ int imageCount,
+ int width = 4000,
+ int height = 3000,
+ bool includeSubfolders = false)
+ {
+ Directory.CreateDirectory(outputDirectory);
+
+ var random = new Random(42);
+ var encoder = new JpegEncoder { Quality = 85 };
+
+ for (var i = 0; i < imageCount; i++)
+ {
+ var targetDir = outputDirectory;
+
+ if (includeSubfolders && i % 10 == 0)
+ {
+ targetDir = Path.Combine(outputDirectory, $"Subfolder_{i / 10}");
+ Directory.CreateDirectory(targetDir);
+ }
+
+ var filePath = Path.Combine(targetDir, $"test_image_{i:D5}.jpg");
+ if (File.Exists(filePath))
+ {
+ continue;
+ }
+
+ using var image = new Image(width, height, RandomColor(random));
+ AddBenchmarkTexture(image, random);
+ image.Save(filePath, encoder);
+ }
+ }
+
+ public static void CleanupTestImages(string directory)
+ {
+ if (Directory.Exists(directory))
+ {
+ Directory.Delete(directory, recursive: true);
+ }
+ }
+
+ private static void AddBenchmarkTexture(Image image, Random random)
+ {
+ image.ProcessPixelRows(accessor =>
+ {
+ for (var shape = 0; shape < 20; shape++)
+ {
+ var color = RandomColor(random);
+ var startX = random.Next(image.Width);
+ var startY = random.Next(image.Height);
+ var width = random.Next(200, Math.Min(800, image.Width) + 1);
+ var height = random.Next(200, Math.Min(800, image.Height) + 1);
+ var endX = Math.Min(accessor.Width, startX + width);
+ var endY = Math.Min(accessor.Height, startY + height);
+
+ for (var y = startY; y < endY; y++)
+ {
+ var row = accessor.GetRowSpan(y);
+ for (var x = startX; x < endX; x++)
+ {
+ row[x] = color;
+ }
+ }
+ }
+ });
+ }
+
+ private static Rgba32 RandomColor(Random random)
+ {
+ return new Rgba32(
+ (byte)random.Next(256),
+ (byte)random.Next(256),
+ (byte)random.Next(256),
+ 255);
+ }
+}
diff --git a/MaddoShared.Benchmarks/ImageProcessingBenchmarks.cs b/MaddoShared.Benchmarks/ImageProcessingBenchmarks.cs
new file mode 100644
index 0000000..49f86d0
--- /dev/null
+++ b/MaddoShared.Benchmarks/ImageProcessingBenchmarks.cs
@@ -0,0 +1,182 @@
+using System;
+using System.Collections.Concurrent;
+using System.IO;
+using System.Threading;
+using System.Threading.Tasks;
+using BenchmarkDotNet.Attributes;
+using BenchmarkDotNet.Configs;
+using BenchmarkDotNet.Engines;
+using BenchmarkDotNet.Jobs;
+using BenchmarkDotNet.Toolchains.InProcess.Emit;
+using MaddoShared.Benchmarks.Helpers;
+using Microsoft.Extensions.Logging;
+
+namespace MaddoShared.Benchmarks;
+
+///
+/// Benchmarks for image processing with various configurations
+///
+[MemoryDiagnoser]
+[Config(typeof(InProcessConfig))]
+public class ImageProcessingBenchmarks
+{
+ private string _sourceDirectory;
+ private string _destinationDirectory;
+ private ImageCreationService _imageCreationStuff;
+ private PicSettings _picSettings;
+ private ILogger _logger;
+ private ILogger _imageCreatorLogger;
+
+ [Params(10, 50, 100)]
+ public int ImageCount { get; set; }
+
+ [Params(1, 2, 4, 8)]
+ public int MaxThreads { get; set; }
+
+ [GlobalSetup]
+ public void Setup()
+ {
+ // Create temp directories
+ var tempBase = Path.Combine(Path.GetTempPath(), "ImageBenchmarks", Guid.NewGuid().ToString());
+ _sourceDirectory = Path.Combine(tempBase, "Source");
+ _destinationDirectory = Path.Combine(tempBase, "Destination");
+
+ Directory.CreateDirectory(_sourceDirectory);
+ Directory.CreateDirectory(_destinationDirectory);
+
+ // Generate test images
+ Console.WriteLine($"Generating {ImageCount} test images...");
+ TestImageGenerator.GenerateTestImages(_sourceDirectory, ImageCount, width: 2000, height: 1500);
+
+ // Setup logging
+ var loggerFactory = LoggerFactory.Create(builder =>
+ {
+ builder.SetMinimumLevel(LogLevel.Warning); // Reduce noise during benchmarks
+ });
+
+ _logger = loggerFactory.CreateLogger();
+ _imageCreatorLogger = loggerFactory.CreateLogger();
+
+ // Setup PicSettings with default values
+ _picSettings = new PicSettings
+ {
+ DirectorySorgente = _sourceDirectory,
+ DirectoryDestinazione = _destinationDirectory,
+ DimStandard = 800,
+ DimStandardMiniatura = 200,
+ LarghezzaBig = 1024,
+ AltezzaBig = 768,
+ LarghezzaSmall = 200,
+ AltezzaSmall = 150,
+ CreaMiniature = true,
+ AggiungiScritteMiniature = false,
+ UsaForzaJpg = true,
+ UsaRotazioneAutomatica = true,
+ LogoAggiungi = false,
+ FotoGrandeDimOrigina = false,
+ TestoNome = false,
+ NomeData = false,
+ Suffisso = "_small",
+ Margine = 10,
+ Trasparenza = 100
+ };
+
+ var imageCreatorService = new ImageCreatorImageSharp(_picSettings, _imageCreatorLogger);
+ _imageCreationStuff = new ImageCreationService(_logger, _picSettings, imageCreatorService);
+ }
+
+ [GlobalCleanup]
+ public void Cleanup()
+ {
+ // Clean up temp directories
+ try
+ {
+ var tempBase = Path.GetDirectoryName(_sourceDirectory);
+ if (Directory.Exists(tempBase))
+ {
+ Directory.Delete(tempBase, recursive: true);
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine($"Cleanup error: {ex.Message}");
+ }
+ }
+
+ [IterationSetup]
+ public void IterationSetup()
+ {
+ // Clean destination directory before each iteration
+ if (Directory.Exists(_destinationDirectory))
+ {
+ Directory.Delete(_destinationDirectory, recursive: true);
+ }
+ Directory.CreateDirectory(_destinationDirectory);
+ }
+
+ [Benchmark(Description = "Process images in parallel with chunking")]
+ public async Task ProcessImagesParallelWithChunks()
+ {
+ var options = new ImageCreationService.Options
+ {
+ SourcePath = _sourceDirectory,
+ DestinationPath = _destinationDirectory,
+ MaxThreads = MaxThreads,
+ ChunksSize = 10,
+ LinearExecution = false,
+ AggiornaSottodirectory = false,
+ CreaSottocartelle = false,
+ FilePerCartella = 100,
+ SuffissoCartelle = "",
+ CifreContatore = 4,
+ NumerazioneType = NumerazioneType.Progressiva
+ };
+
+ var results = new ConcurrentBag();
+ await _imageCreationStuff.ProcessImagesParallel(options, results, null, CancellationToken.None);
+ }
+
+ [Benchmark(Description = "Process images in parallel without chunking")]
+ public async Task ProcessImagesParallelWithoutChunks()
+ {
+ var options = new ImageCreationService.Options
+ {
+ SourcePath = _sourceDirectory,
+ DestinationPath = _destinationDirectory,
+ MaxThreads = MaxThreads,
+ ChunksSize = 0, // No chunking
+ LinearExecution = false,
+ AggiornaSottodirectory = false,
+ CreaSottocartelle = false,
+ FilePerCartella = 100,
+ SuffissoCartelle = "",
+ CifreContatore = 4,
+ NumerazioneType = NumerazioneType.Progressiva
+ };
+
+ var results = new ConcurrentBag();
+ await _imageCreationStuff.ProcessImagesParallel(options, results, null, CancellationToken.None);
+ }
+
+ [Benchmark(Description = "Process images linearly")]
+ public async Task ProcessImagesLinear()
+ {
+ var options = new ImageCreationService.Options
+ {
+ SourcePath = _sourceDirectory,
+ DestinationPath = _destinationDirectory,
+ MaxThreads = MaxThreads,
+ ChunksSize = 0,
+ LinearExecution = true,
+ AggiornaSottodirectory = false,
+ CreaSottocartelle = false,
+ FilePerCartella = 100,
+ SuffissoCartelle = "",
+ CifreContatore = 4,
+ NumerazioneType = NumerazioneType.Progressiva
+ };
+
+ var results = new ConcurrentBag();
+ await _imageCreationStuff.ProcessImagesParallel(options, results, null, CancellationToken.None);
+ }
+}
diff --git a/MaddoShared.Benchmarks/ImageSizeBenchmarks.cs b/MaddoShared.Benchmarks/ImageSizeBenchmarks.cs
new file mode 100644
index 0000000..b190f8d
--- /dev/null
+++ b/MaddoShared.Benchmarks/ImageSizeBenchmarks.cs
@@ -0,0 +1,151 @@
+using System;
+using System.Collections.Concurrent;
+using System.IO;
+using System.Threading;
+using System.Threading.Tasks;
+using BenchmarkDotNet.Attributes;
+using BenchmarkDotNet.Configs;
+using BenchmarkDotNet.Engines;
+using BenchmarkDotNet.Jobs;
+using BenchmarkDotNet.Toolchains.InProcess.Emit;
+using MaddoShared.Benchmarks.Helpers;
+using Microsoft.Extensions.Logging;
+
+namespace MaddoShared.Benchmarks;
+
+///
+/// Benchmarks for comparing performance with different image sizes
+///
+[MemoryDiagnoser]
+[Config(typeof(InProcessConfig))]
+public class ImageSizeBenchmarks
+{
+ private string _sourceDirectory;
+ private string _destinationDirectory;
+ private ImageCreationService _imageCreationStuff;
+ private PicSettings _picSettings;
+
+ [Params(50)]
+ public int ImageCount { get; set; }
+
+ public enum ImageSize
+ {
+ Small, // 1280x960
+ Medium, // 2560x1920
+ Large, // 4000x3000
+ ExtraLarge // 6000x4000
+ }
+
+ [ParamsAllValues]
+ public ImageSize Size { get; set; }
+
+ [GlobalSetup]
+ public void Setup()
+ {
+ var tempBase = Path.Combine(Path.GetTempPath(), "SizeBenchmarks", Guid.NewGuid().ToString());
+ _sourceDirectory = Path.Combine(tempBase, "Source");
+ _destinationDirectory = Path.Combine(tempBase, "Destination");
+
+ Directory.CreateDirectory(_sourceDirectory);
+ Directory.CreateDirectory(_destinationDirectory);
+
+ var (width, height) = GetDimensions(Size);
+ Console.WriteLine($"Generating {ImageCount} test images at {width}x{height}...");
+ TestImageGenerator.GenerateTestImages(_sourceDirectory, ImageCount, width, height);
+
+ var loggerFactory = LoggerFactory.Create(builder =>
+ {
+ builder.SetMinimumLevel(LogLevel.Warning);
+ });
+
+ var logger = loggerFactory.CreateLogger();
+ var imageCreatorLogger = loggerFactory.CreateLogger();
+
+ _picSettings = new PicSettings
+ {
+ DirectorySorgente = _sourceDirectory,
+ DirectoryDestinazione = _destinationDirectory,
+ DimStandard = 800,
+ DimStandardMiniatura = 200,
+ LarghezzaBig = 1024,
+ AltezzaBig = 768,
+ LarghezzaSmall = 200,
+ AltezzaSmall = 150,
+ CreaMiniature = true,
+ AggiungiScritteMiniature = false,
+ UsaForzaJpg = true,
+ UsaRotazioneAutomatica = true,
+ LogoAggiungi = false,
+ FotoGrandeDimOrigina = false,
+ TestoNome = false,
+ NomeData = false,
+ Suffisso = "_small",
+ Margine = 10,
+ Trasparenza = 100
+ };
+
+ var imageCreatorService = new ImageCreatorImageSharp(_picSettings, imageCreatorLogger);
+ _imageCreationStuff = new ImageCreationService(logger, _picSettings, imageCreatorService);
+ }
+
+ private static (int width, int height) GetDimensions(ImageSize size)
+ {
+ return size switch
+ {
+ ImageSize.Small => (1280, 960),
+ ImageSize.Medium => (2560, 1920),
+ ImageSize.Large => (4000, 3000),
+ ImageSize.ExtraLarge => (6000, 4000),
+ _ => throw new ArgumentException($"Unknown size: {size}")
+ };
+ }
+
+ [GlobalCleanup]
+ public void Cleanup()
+ {
+ try
+ {
+ var tempBase = Path.GetDirectoryName(_sourceDirectory);
+ if (Directory.Exists(tempBase))
+ {
+ Directory.Delete(tempBase, recursive: true);
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine($"Cleanup error: {ex.Message}");
+ }
+ }
+
+ [IterationSetup]
+ public void IterationSetup()
+ {
+ if (Directory.Exists(_destinationDirectory))
+ {
+ Directory.Delete(_destinationDirectory, recursive: true);
+ }
+ Directory.CreateDirectory(_destinationDirectory);
+ }
+
+ [Benchmark]
+ public async Task ProcessDifferentImageSizes()
+ {
+ var options = new ImageCreationService.Options
+ {
+ SourcePath = _sourceDirectory,
+ DestinationPath = _destinationDirectory,
+ MaxThreads = Environment.ProcessorCount,
+ ChunksSize = 10,
+ LinearExecution = false,
+ AggiornaSottodirectory = false,
+ CreaSottocartelle = false,
+ FilePerCartella = 100,
+ SuffissoCartelle = "",
+ CifreContatore = 4,
+ NumerazioneType = NumerazioneType.Progressiva
+ };
+
+ var results = new ConcurrentBag();
+ await _imageCreationStuff.ProcessImagesParallel(options, results, null, CancellationToken.None);
+ }
+}
diff --git a/MaddoShared.Benchmarks/MaddoShared.Benchmarks.csproj b/MaddoShared.Benchmarks/MaddoShared.Benchmarks.csproj
new file mode 100644
index 0000000..f68e319
--- /dev/null
+++ b/MaddoShared.Benchmarks/MaddoShared.Benchmarks.csproj
@@ -0,0 +1,19 @@
+
+
+
+ Exe
+ net10.0
+ x64
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/MaddoShared.Benchmarks/Program.cs b/MaddoShared.Benchmarks/Program.cs
new file mode 100644
index 0000000..cba4a67
--- /dev/null
+++ b/MaddoShared.Benchmarks/Program.cs
@@ -0,0 +1,35 @@
+using BenchmarkDotNet.Configs;
+using BenchmarkDotNet.Jobs;
+using BenchmarkDotNet.Running;
+using BenchmarkDotNet.Toolchains.InProcess.Emit;
+using System;
+using System.Linq;
+
+namespace MaddoShared.Benchmarks;
+
+internal class Program
+{
+ static void Main(string[] args)
+ {
+ // Check if --job argument is provided
+ bool hasJobArg = args.Any(a => a.Contains("--job"));
+
+ if (hasJobArg)
+ {
+ Console.WriteLine("Note: Overriding --job argument to use InProcess toolchain");
+ Console.WriteLine("This is required to avoid net10.0 vs net10.0-windows compatibility issues.");
+ Console.WriteLine();
+
+ // Remove --job arguments and add our own InProcess config
+ args = args.Where(a => !a.StartsWith("--job") && a != "dry" && a != "short").ToArray();
+ }
+
+ // Create configuration that always uses InProcess toolchain
+ var config = DefaultConfig.Instance
+ .WithOptions(ConfigOptions.DisableOptimizationsValidator)
+ .WithOptions(ConfigOptions.KeepBenchmarkFiles);
+
+ // Run benchmarks - each class has [Config(typeof(InProcessConfig))] which provides InProcess toolchain
+ BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args, config);
+ }
+}
diff --git a/MaddoShared.Benchmarks/StressTestBenchmark.cs b/MaddoShared.Benchmarks/StressTestBenchmark.cs
new file mode 100644
index 0000000..32d1723
--- /dev/null
+++ b/MaddoShared.Benchmarks/StressTestBenchmark.cs
@@ -0,0 +1,172 @@
+using System;
+using System.Collections.Concurrent;
+using System.IO;
+using System.Threading;
+using System.Threading.Tasks;
+using BenchmarkDotNet.Attributes;
+using BenchmarkDotNet.Configs;
+using BenchmarkDotNet.Jobs;
+using BenchmarkDotNet.Toolchains.InProcess.Emit;
+using MaddoShared.Benchmarks.Helpers;
+using Microsoft.Extensions.Logging;
+
+namespace MaddoShared.Benchmarks;
+
+///
+/// Stress test benchmark for large-scale image processing
+/// WARNING: This will generate a large number of images and may take significant time and disk space
+///
+[MemoryDiagnoser]
+[Config(typeof(InProcessConfig))]
+public class StressTestBenchmark
+{
+ private string _sourceDirectory;
+ private string _destinationDirectory;
+ private ImageCreationService _imageCreationStuff;
+ private PicSettings _picSettings;
+
+ [Params(500, 1000)]
+ public int ImageCount { get; set; }
+
+ [GlobalSetup]
+ public void Setup()
+ {
+ var tempBase = Path.Combine(Path.GetTempPath(), "StressTestBenchmarks", Guid.NewGuid().ToString());
+ _sourceDirectory = Path.Combine(tempBase, "Source");
+ _destinationDirectory = Path.Combine(tempBase, "Destination");
+
+ Directory.CreateDirectory(_sourceDirectory);
+ Directory.CreateDirectory(_destinationDirectory);
+
+ Console.WriteLine($"[STRESS TEST] Generating {ImageCount} test images...");
+ Console.WriteLine("This may take several minutes depending on your hardware.");
+
+ // Use smaller images for stress test to save space and time
+ TestImageGenerator.GenerateTestImages(_sourceDirectory, ImageCount, width: 1920, height: 1080);
+
+ var loggerFactory = LoggerFactory.Create(builder =>
+ {
+ builder.SetMinimumLevel(LogLevel.Warning);
+ });
+
+ var logger = loggerFactory.CreateLogger();
+ var imageCreatorLogger = loggerFactory.CreateLogger();
+
+ _picSettings = new PicSettings
+ {
+ DirectorySorgente = _sourceDirectory,
+ DirectoryDestinazione = _destinationDirectory,
+ DimStandard = 800,
+ DimStandardMiniatura = 200,
+ LarghezzaBig = 1024,
+ AltezzaBig = 768,
+ LarghezzaSmall = 200,
+ AltezzaSmall = 150,
+ CreaMiniature = true,
+ AggiungiScritteMiniature = false,
+ UsaForzaJpg = true,
+ UsaRotazioneAutomatica = true,
+ LogoAggiungi = false,
+ FotoGrandeDimOrigina = false,
+ TestoNome = false,
+ NomeData = false,
+ Suffisso = "_small",
+ Margine = 10,
+ Trasparenza = 100
+ };
+
+ var imageCreatorService = new ImageCreatorImageSharp(_picSettings, imageCreatorLogger);
+ _imageCreationStuff = new ImageCreationService(logger, _picSettings, imageCreatorService);
+
+ Console.WriteLine($"[STRESS TEST] Setup complete. Ready to process {ImageCount} images.");
+ }
+
+ [GlobalCleanup]
+ public void Cleanup()
+ {
+ Console.WriteLine("[STRESS TEST] Cleaning up test data...");
+ try
+ {
+ var tempBase = Path.GetDirectoryName(_sourceDirectory);
+ if (Directory.Exists(tempBase))
+ {
+ Directory.Delete(tempBase, recursive: true);
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine($"Cleanup error: {ex.Message}");
+ }
+ }
+
+ [IterationSetup]
+ public void IterationSetup()
+ {
+ if (Directory.Exists(_destinationDirectory))
+ {
+ Directory.Delete(_destinationDirectory, recursive: true);
+ }
+ Directory.CreateDirectory(_destinationDirectory);
+ GC.Collect(GC.MaxGeneration, GCCollectionMode.Aggressive, blocking: true, compacting: true);
+ }
+
+ [Benchmark(Description = "Stress test with optimal settings")]
+ public async Task StressTestOptimalSettings()
+ {
+ var options = new ImageCreationService.Options
+ {
+ SourcePath = _sourceDirectory,
+ DestinationPath = _destinationDirectory,
+ MaxThreads = Environment.ProcessorCount,
+ ChunksSize = 25, // Process in chunks to manage memory
+ LinearExecution = false,
+ AggiornaSottodirectory = false,
+ CreaSottocartelle = false,
+ FilePerCartella = 100,
+ SuffissoCartelle = "",
+ CifreContatore = 4,
+ NumerazioneType = NumerazioneType.Progressiva
+ };
+
+ var results = new ConcurrentBag();
+ var startTime = DateTime.Now;
+
+ await _imageCreationStuff.ProcessImagesParallel(options, results, null, CancellationToken.None);
+
+ var duration = DateTime.Now - startTime;
+ var throughput = ImageCount / duration.TotalSeconds;
+
+ Console.WriteLine($"[STRESS TEST] Processed {results.Count}/{ImageCount} images in {duration.TotalSeconds:F2}s");
+ Console.WriteLine($"[STRESS TEST] Throughput: {throughput:F2} images/second");
+ }
+
+ [Benchmark(Description = "Stress test with aggressive memory management")]
+ public async Task StressTestAggressiveMemoryManagement()
+ {
+ var options = new ImageCreationService.Options
+ {
+ SourcePath = _sourceDirectory,
+ DestinationPath = _destinationDirectory,
+ MaxThreads = Environment.ProcessorCount / 2, // Reduce threads to save memory
+ ChunksSize = 10, // Smaller chunks for more frequent GC
+ LinearExecution = false,
+ AggiornaSottodirectory = false,
+ CreaSottocartelle = false,
+ FilePerCartella = 100,
+ SuffissoCartelle = "",
+ CifreContatore = 4,
+ NumerazioneType = NumerazioneType.Progressiva
+ };
+
+ var results = new ConcurrentBag();
+ var startTime = DateTime.Now;
+
+ await _imageCreationStuff.ProcessImagesParallel(options, results, null, CancellationToken.None);
+
+ var duration = DateTime.Now - startTime;
+ var throughput = ImageCount / duration.TotalSeconds;
+
+ Console.WriteLine($"[STRESS TEST] Processed {results.Count}/{ImageCount} images in {duration.TotalSeconds:F2}s");
+ Console.WriteLine($"[STRESS TEST] Throughput: {throughput:F2} images/second");
+ }
+}
diff --git a/MaddoShared.ImageSharpTests/Helpers/CreatorFactory.cs b/MaddoShared.ImageSharpTests/Helpers/CreatorFactory.cs
new file mode 100644
index 0000000..cb25390
--- /dev/null
+++ b/MaddoShared.ImageSharpTests/Helpers/CreatorFactory.cs
@@ -0,0 +1,44 @@
+using System.IO;
+using Microsoft.Extensions.Logging.Abstractions;
+using SixLabors.ImageSharp.PixelFormats;
+
+namespace MaddoShared.ImageSharpTests.Helpers
+{
+ public static class CreatorFactory
+ {
+ public static MaddoShared.PicSettings CreateDefaultPicSettings()
+ {
+ return new MaddoShared.PicSettings
+ {
+ DimStandard = 48,
+ DimStandardMiniatura = 12,
+ LarghezzaSmall = 150,
+ AltezzaSmall = 150,
+ LarghezzaBig = 800,
+ AltezzaBig = 600,
+ Trasparenza = 0,
+ IlFont = "Arial",
+ Grassetto = false,
+ Posizione = "CENTRO",
+ Allineamento = "CENTRO",
+ Margine = 10,
+ MargVert = 10,
+ TestoMin = false,
+ AggNumTempMin = false,
+ CreaMiniature = false,
+ LogoAggiungi = false,
+ LogoAltezza = 100,
+ LogoLarghezza = 100,
+ LogoMargine = "0",
+ JpegQuality = 90,
+ JpegQualityMin = 75,
+ };
+ }
+
+ public static MaddoShared.ImageCreatorImageSharp CreateImageCreator(MaddoShared.PicSettings settings)
+ {
+ var logger = NullLogger.Instance;
+ return new MaddoShared.ImageCreatorImageSharp(settings, logger);
+ }
+ }
+}
diff --git a/MaddoShared.ImageSharpTests/Helpers/PixelInspector.cs b/MaddoShared.ImageSharpTests/Helpers/PixelInspector.cs
new file mode 100644
index 0000000..5642ec7
--- /dev/null
+++ b/MaddoShared.ImageSharpTests/Helpers/PixelInspector.cs
@@ -0,0 +1,40 @@
+using System;
+using SixLabors.ImageSharp;
+using SixLabors.ImageSharp.PixelFormats;
+
+namespace MaddoShared.ImageSharpTests.Helpers
+{
+ public static class PixelInspector
+ {
+ public static int CountNonBackgroundPixels(string path, int x, int y, int width, int height, Rgba32 background, int tolerance = 0)
+ {
+ using var img = SixLabors.ImageSharp.Image.Load(path);
+ var bx = Math.Max(0, x);
+ var by = Math.Max(0, y);
+ var bw = Math.Min(width, img.Width - bx);
+ var bh = Math.Min(height, img.Height - by);
+ if (bw <= 0 || bh <= 0) return 0;
+
+ int count = 0;
+ img.ProcessPixelRows(accessor =>
+ {
+ for (int yy = by; yy < by + bh; yy++)
+ {
+ var row = accessor.GetRowSpan(yy);
+ for (int xx = bx; xx < bx + bw; xx++)
+ {
+ var p = row[xx];
+ if (!IsApproximatelyEqual(p, background, tolerance)) count++;
+ }
+ }
+ });
+
+ return count;
+ }
+
+ private static bool IsApproximatelyEqual(Rgba32 a, Rgba32 b, int tol)
+ {
+ return Math.Abs(a.R - b.R) <= tol && Math.Abs(a.G - b.G) <= tol && Math.Abs(a.B - b.B) <= tol && Math.Abs(a.A - b.A) <= tol;
+ }
+ }
+}
diff --git a/MaddoShared.ImageSharpTests/Helpers/TempWorkspace.cs b/MaddoShared.ImageSharpTests/Helpers/TempWorkspace.cs
new file mode 100644
index 0000000..fba6bd8
--- /dev/null
+++ b/MaddoShared.ImageSharpTests/Helpers/TempWorkspace.cs
@@ -0,0 +1,33 @@
+using System;
+using System.IO;
+
+namespace MaddoShared.ImageSharpTests.Helpers
+{
+ public sealed class TempWorkspace : IDisposable
+ {
+ public DirectoryInfo Root { get; }
+ public DirectoryInfo SourceDir { get; }
+ public DirectoryInfo DestDir { get; }
+
+ public TempWorkspace()
+ {
+ var root = Path.Combine(Path.GetTempPath(), "MaddoShared.ImageSharpTests", Guid.NewGuid().ToString("N"));
+ Root = Directory.CreateDirectory(root);
+ SourceDir = Directory.CreateDirectory(Path.Combine(Root.FullName, "Source"));
+ DestDir = Directory.CreateDirectory(Path.Combine(Root.FullName, "Dest"));
+ }
+
+ public void Dispose()
+ {
+ try
+ {
+ if (Root.Exists)
+ Root.Delete(true);
+ }
+ catch
+ {
+ // best-effort cleanup
+ }
+ }
+ }
+}
diff --git a/MaddoShared.ImageSharpTests/Helpers/TestImageFactory.cs b/MaddoShared.ImageSharpTests/Helpers/TestImageFactory.cs
new file mode 100644
index 0000000..4f15dd8
--- /dev/null
+++ b/MaddoShared.ImageSharpTests/Helpers/TestImageFactory.cs
@@ -0,0 +1,45 @@
+using System.IO;
+using SixLabors.ImageSharp;
+using SixLabors.ImageSharp.PixelFormats;
+using SixLabors.ImageSharp.Processing;
+using SixLabors.ImageSharp.Formats.Jpeg;
+using SixLabors.ImageSharp.Metadata.Profiles.Exif;
+
+namespace MaddoShared.ImageSharpTests.Helpers
+{
+ public static class TestImageFactory
+ {
+ public static string CreateSolidJpeg(string directory, string fileName, int width, int height, Rgba32 color)
+ {
+ Directory.CreateDirectory(directory);
+ var path = Path.Combine(directory, fileName);
+ using var img = new Image(width, height, color);
+ var encoder = new JpegEncoder { Quality = 90 };
+ img.Save(path, encoder);
+ return path;
+ }
+
+ public static string CreateSolidPng(string directory, string fileName, int width, int height, Rgba32 color)
+ {
+ Directory.CreateDirectory(directory);
+ var path = Path.Combine(directory, fileName);
+ using var img = new Image(width, height, color);
+ img.SaveAsPng(path);
+ return path;
+ }
+
+ public static string CreateJpegWithExifOrientation(string directory, string fileName, int width, int height, Rgba32 color, ushort orientation)
+ {
+ Directory.CreateDirectory(directory);
+ var path = Path.Combine(directory, fileName);
+ using var img = new Image(width, height, color);
+ // Add EXIF orientation
+ var profile = new ExifProfile();
+ profile.SetValue(ExifTag.Orientation, orientation);
+ img.Metadata.ExifProfile = profile;
+ var encoder = new JpegEncoder { Quality = 90 };
+ img.Save(path, encoder);
+ return path;
+ }
+ }
+}
diff --git a/MaddoShared.ImageSharpTests/MaddoShared.ImageSharpTests.csproj b/MaddoShared.ImageSharpTests/MaddoShared.ImageSharpTests.csproj
new file mode 100644
index 0000000..9d7d59a
--- /dev/null
+++ b/MaddoShared.ImageSharpTests/MaddoShared.ImageSharpTests.csproj
@@ -0,0 +1,27 @@
+
+
+
+ net10.0
+ latest
+ enable
+ enable
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/MaddoShared.ImageSharpTests/Tests/ImageResizingTests.cs b/MaddoShared.ImageSharpTests/Tests/ImageResizingTests.cs
new file mode 100644
index 0000000..ddc75ce
--- /dev/null
+++ b/MaddoShared.ImageSharpTests/Tests/ImageResizingTests.cs
@@ -0,0 +1,44 @@
+using System.IO;
+using System.Threading.Tasks;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+using SixLabors.ImageSharp.PixelFormats;
+using MaddoShared.ImageSharpTests.Helpers;
+using Shouldly;
+
+namespace MaddoShared.ImageSharpTests.Tests
+{
+ [TestClass]
+ public class ImageResizingTests
+ {
+ [TestMethod]
+ public async Task BigImageResizesRespectSettings()
+ {
+ using var ws = new TempWorkspace();
+
+ // create a large input image
+ var inputPath = TestImageFactory.CreateSolidJpeg(ws.SourceDir.FullName, "input.jpg", 1600, 1200, new Rgba32(200, 200, 200, 255));
+
+ var pic = CreatorFactory.CreateDefaultPicSettings();
+ pic.LarghezzaBig = 800;
+ pic.AltezzaBig = 600;
+ pic.CreaMiniature = false;
+
+ var svc = CreatorFactory.CreateImageCreator(pic);
+
+ var state = new MaddoShared.ImageState
+ {
+ WorkFile = new FileInfo(inputPath),
+ DestDir = ws.DestDir,
+ SourceDir = ws.SourceDir
+ };
+
+ await svc.CreateImageAsync(state, null);
+
+ var outPath = Path.Combine(ws.DestDir.FullName, state.NomeFileBig);
+ using var outImg = SixLabors.ImageSharp.Image.Load(outPath);
+
+ outImg.Width.ShouldBe(800);
+ outImg.Height.ShouldBe(600);
+ }
+ }
+}
diff --git a/MaddoShared.ImageSharpTests/Tests/TextPositioningTests.cs b/MaddoShared.ImageSharpTests/Tests/TextPositioningTests.cs
new file mode 100644
index 0000000..c93460e
--- /dev/null
+++ b/MaddoShared.ImageSharpTests/Tests/TextPositioningTests.cs
@@ -0,0 +1,51 @@
+using System.IO;
+using System.Threading.Tasks;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+using SixLabors.ImageSharp.PixelFormats;
+using MaddoShared.ImageSharpTests.Helpers;
+using Shouldly;
+
+namespace MaddoShared.ImageSharpTests.Tests
+{
+ [TestClass]
+ public class TextPositioningTests
+ {
+ [TestMethod]
+ public async Task TextAtBottom_IncreasesNonBackgroundPixelCountInBottomBand()
+ {
+ using var ws = new TempWorkspace();
+
+ // create white background input
+ var inputPath = TestImageFactory.CreateSolidJpeg(ws.SourceDir.FullName, "input.jpg", 800, 600, new Rgba32(255, 255, 255, 255));
+
+ var pic = CreatorFactory.CreateDefaultPicSettings();
+ pic.Posizione = "BASSO";
+ pic.DimStandard = 48; // big text
+ pic.TestoFirmaStart = "SAMPLE TEXT";
+ pic.CreaMiniature = false;
+
+ var svc = CreatorFactory.CreateImageCreator(pic);
+
+ var state = new MaddoShared.ImageState
+ {
+ WorkFile = new FileInfo(inputPath),
+ DestDir = ws.DestDir,
+ SourceDir = ws.SourceDir
+ };
+
+ await svc.CreateImageAsync(state, null);
+
+ var outPath = Path.Combine(ws.DestDir.FullName, state.NomeFileBig);
+
+ // bottom band (lower 25% of image)
+ var bottomY = (int)(600 * 0.75);
+ var bottomCount = PixelInspector.CountNonBackgroundPixels(outPath, 0, bottomY, 800, 600 - bottomY, new Rgba32(255, 255, 255, 255), tolerance: 10);
+
+ // top band (upper 25%)
+ var topCount = PixelInspector.CountNonBackgroundPixels(outPath, 0, 0, 800, (int)(600 * 0.25), new Rgba32(255, 255, 255, 255), tolerance: 10);
+
+ (bottomCount > 50).ShouldBeTrue($"Expected text pixels in bottom band, found {bottomCount}");
+ (bottomCount > topCount).ShouldBeTrue("Expected more non-background pixels at bottom than top");
+ }
+ }
+}
diff --git a/MaddoShared.Tests/DataModelCharacterizationTests.cs b/MaddoShared.Tests/DataModelCharacterizationTests.cs
new file mode 100644
index 0000000..6e8c82c
--- /dev/null
+++ b/MaddoShared.Tests/DataModelCharacterizationTests.cs
@@ -0,0 +1,462 @@
+using System;
+using System.IO;
+using System.Threading.Tasks;
+using ImageCatalog_2;
+using ImageCatalog_2.Services;
+using MaddoShared;
+using Microsoft.Extensions.Logging;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+using NSubstitute;
+using Shouldly;
+
+namespace MaddoShared.Tests;
+
+[TestClass]
+public class DataModelCharacterizationTests
+{
+ [TestMethod]
+ public void SelectSourceFolderCommand_RaisesEvent()
+ {
+ var model = CreateModel();
+ var raised = false;
+ model.SelectSourceFolderRequested += (_, _) => raised = true;
+
+ model.SelectSourceFolderCommand.Execute(null);
+
+ raised.ShouldBeTrue();
+ }
+
+ [TestMethod]
+ public async Task SaveSettingsToFileAsync_DelegatesToSettingsService()
+ {
+ var settingsService = Substitute.For();
+ settingsService
+ .SaveSettingsAsync(Arg.Any(), Arg.Any