Schneller Bildbetrachter für Windows 10/11 mit zwei Ansichten (Liste und Bild). C# / .NET 10 / WPF. Hinweis: Der Quelltext wurde noch nicht auf einem Windows-Rechner kompiliert – falls der Build Fehler meldet, bitte die Meldung zurückschicken, dann wird nachgebessert.
Normale PowerShell im Ordner dieses Projekts öffnen:
winget install Microsoft.DotNet.SDK.10 # einmalig: Compiler
.\build.ps1 # baut nach .\publish (Option: -SelfContained)
.\register.ps1 # installiert nach %LOCALAPPDATA%\Programs\BildbetrachterDanach öffnet sich Einstellungen → Standard-Apps. Dort Bildbetrachter wählen und „Als Standard festlegen“
(Windows erlaubt es Programmen nicht, sich selbst zum Standard zu machen). Entfernen: .\register.ps1 -Uninstall.
Läuft der Build ohne -SelfContained, braucht das Programm die Runtime:
winget install Microsoft.DotNet.DesktopRuntime.10.
Allgemein: Beim Start wird der zuletzt benutzte Ordner in der Listenansicht geöffnet (existiert er nicht mehr: Bilder-Ordner, sonst Dokumente/Desktop). Wird eine Bilddatei per Doppelklick/„Öffnen mit“ gestartet, öffnet sich direkt die Bildansicht.
Liste (Ordnerbaum | Vorschau | Bildliste, Spaltenbreiten per Trenner einstellbar und gespeichert)
- Doppelklick oder Enter → Bildansicht, F5 → Ordner neu einlesen
- Rechtsklick: Verschieben … / Kopieren … / Sortieren / Bilder beim Laden anzeigen / Bildinformationen
- Bildinformationen: Format, Breite×Höhe, Pixelzahl, Farbstufen, Dateigröße in Byte; bei PNGs mit Text-Metadaten (z. B. Stable-Diffusion-Prompt) erscheint in der Vorschau ein ⓘ und ein Kopieren-Button
Bild
| Aktion | Wirkung |
|---|---|
| Ziehen mit linker Maustaste | Ist das Bild kleiner als das Fenster: Rechteck aufziehen → auf den Bereich zoomen. Ist es größer: Bildausschnitt verschieben. Mit Shift immer Zoom-Rechteck |
| Mausrad | nächstes / vorheriges Bild (mit Strg: Zoom) |
| Bild ↑ / Bild ↓ | vorheriges / nächstes Bild |
| Pos1 / Ende | erstes / letztes Bild der aktuellen Sortierung |
| Num // und Num * | Setzt zoom auf 100% bzw. auf Optimale Skalierung |
| Pfeiltasten | Bildausschnitt verschieben |
| Num + / Num − | Zoom: 10 20 30 50 70 100 125 150 200 300 500 700 1000 2000 3000 5000 % (zwischen zwei Stufen → nächste Stufe) |
| Doppelklick | zurück zur Liste |
| Mittlere Maustaste (oder F11) | Vollbild ein/aus |
| Esc | zurück zur Liste (beendet auch das Vollbild) |
| Rechtsklick | Verschieben …, Kopieren …, Sortieren, Lade-Modus |
Das Fenster wächst beim Zoomen mit (bis zum Arbeitsbereich des Monitors). Lade-Modi (Rechtsklick): Optimale Größe (einpassen, nur verkleinern), Aktuelle Zoomstufe, Originalgröße (Standard nach Programmstart). Verschieben/Kopieren: Liste mit bis zu 10 Zielordnern (Hinzufügen, Löschen, Sortieren, ▲▼); Doppelklick oder OK führt aus. Sortierung: Geändert / Erstellt / Name, je auf- oder absteigend; Name nach Windows-Art (ABC_1, ABC_10, ABC_100).
Läuft der Bildbetrachter bereits und wird ein weiteres Bild geöffnet (Doppelklick im Explorer, „Öffnen mit“), erscheint es im vorhandenen Fenster; die neue Instanz beendet sich sofort. Ein Ordner als Argument zeigt die Listenansicht. Die Übergabe läuft über eine Named Pipe, die nur für den eigenen Windows-Benutzer erreichbar ist.
APP_ICON.pngwird vonbuild.ps1in eine mehrgrößige.ico(16–256 px) umgewandelt und als Anwendungs-Icon der EXE gesetzt (Explorer, Taskleiste, Fenster).- Alle
*.icoaussrc\ICONwerden vonbuild.ps1als Icon-Ressourcen in die EXE eingebettet. Welche Dateiendungen zu welchem Icon gehören, steht insrc\ICON\icon-map.json(Name der.icoohne Endung → Liste der Endungen). Neues Icon:XYZ.icoablegen, inicon-map.jsoneintragen,build.ps1undregister.ps1erneut ausführen. build.ps1schreibt die aufgelöste Zuordnung nachpublish\icons.json.register.ps1legt damit pro Icon eine eigene ProgID an (Bildbetrachter.JPGusw.,DefaultIcon=Bildbetrachter.exe,-<ID>) und ordnet jede Endung zu. Endungen ohne eigenes Icon (z. B. HEIC, AVIF) bekommen das Programm-Icon.- Die Datei-Icons sind aktuell nur 16 × 16 px; für scharfe Darstellung bei großen Symbolen bitte größere Varianten
(32/48/256 px) in dieselbe
.icopacken. - Das Einbetten ändert die fertige EXE nachträglich – deshalb keine „Single-File“-Veröffentlichung verwenden.
- Die Listenansicht hat eine eigene, gespeicherte Fenstergröße. Beim Zurückkehren aus der Bildansicht (und beim Start) erscheint sie in dieser Größe mittig auf dem aktuellen Bildschirm.
- Beim Wechsel in die Bildansicht passt sich das Fenster der Bildgröße an (höchstens bis zum Arbeitsbereich des Monitors); das Bild wird zentriert. Bei weiteren Bildern und beim Zoomen wächst das Fenster nur noch.
- Spaltenbreiten (Ordner, Vorschau, Name, Geändert, Größe) werden gespeichert.
- Der Ordnerbaum zeigt oben Bilder, Desktop, Dokumente, Downloads, Videos, Musik und Userhome, darunter „Dieser PC“. „Galerie“ fehlt bewusst: Das ist in Windows 11 ein virtueller Ordner ohne echten Pfad.
- Miniaturvorschau (50 × 50): Rechtsklick → „Miniaturvorschau“; wird gespeichert. Die Miniaturen werden nur für sichtbare Zeilen im Hintergrund geladen.
| Baustein | Zweck | Lizenz |
|---|---|---|
| .NET 10 + WPF | Laufzeit, Oberfläche, JPG/PNG/GIF/BMP/TIFF/ICO über Windows-Codecs (WIC) | MIT |
| Magick.NET-Q8-AnyCPU (ImageMagick) | WebP, HEIC/HEIF, AVIF, JPEG XL, TGA, PSD, JPEG 2000, DDS, PCX | Apache-2.0 (ImageMagick-Lizenz, Apache-ähnlich) |
| WpfAnimatedGif | animierte GIFs | Apache-2.0 |
Alle drei erlauben private und kommerzielle Nutzung ohne Gebühren; bei Weitergabe der Binärdateien die jeweiligen Lizenztexte beilegen. Die in Magick.NET enthaltenen HEIC/AVIF-Decoder (libheif u. a.) haben eigene Lizenzen (teils LGPL) – für die private Nutzung unproblematisch, bei Weitergabe prüfen.
Geschwindigkeit & Garbage Collector: Dekodierung läuft im Hintergrund (max. 2 parallel), veraltete Anfragen werden beim
schnellen Blättern abgebrochen, die Nachbarbilder werden vorgeladen, Bilder liegen in einem LRU-Cache mit festem
Speicherbudget (600 MB Vollbilder / 150 MB Vorschauen; Konstanten in ImageService.cs). Dekodierte Bitmaps liegen bei
WIC im nativen Speicher, nicht im verwalteten Heap; zusätzlich: Workstation-GC mit Concurrent-GC und
SustainedLowLatency.
- Spaltenreihenfolge in der Liste:
MainWindow.xaml - Vorschau nicht über 100 % vergrößern:
StretchDirection="DownOnly"beimPreviewImage - Weitere Dateiendungen:
ImageFiles.cs - Einstellungen liegen in
%APPDATA%\Bildbetrachter\settings.json