PhotoCollector - Informationen


Diese einfache Anwendung entstand, weil ich eine Fotosammlung mit gescannten alten Fotos zusammenstellen wollte. Den Fotos sollten (teilweise unvollständige) Datumsangaben, Autoren und Quellennummern zugeordnet werden. Später kam ich noch auf die Idee, daß man Personen oder Gebäude auf den Fotos mit Imagemaps bezeichnen sollte.

Dabei begegneten mir jede Menge Probleme:
Wie zeigt man grosse Listen mit Bildern an, ohne den Arbeitsspeicher zu sehr zu belasten (und damit die Anwendung zu blockieren)?
Wie kann man ein einzelnes Bild zoomen und scrollen, auch wenn die Datei ein paar Megabyte gross ist?

Herausgekommen sind mehrere fast vollständig selbst gezeichnete Controls, die Grafiken anzeigen und zoomen können. Diese Controls können relativ bequem auch in andere Anwendungen eingebunden werden. An verschiedenen Stellen werden Threads verwendet, um das Laden von Bildern im Hintergrund zu erledigen.

Vielleicht hab ich mich an manchen Stellen zu umständlich angestellt, es könnte sein, dass einige Probleme einfacher zu lösen wären. Auf Vollständigkeit und Freiheit von Bugs erhebe ich keinen Anspruch.

Die Funktion der Anwendung ist einfach erklärt: "Mit Bilder importieren" holt man sich Fotos aus beliebigen Ordnern auf der Festplatte. Diese werden in einen Ordner Anwendungsverzeichnis kopiert. Diese Fotos werden dann in einem ZoomListView-Steuerelement angezeigt. (Dieses Steuerelement zeigt Bilder ähnlich wie ein ListView an, ermöglicht MultiSelect, Drag&Drop und in begrenztem Rahmen gleichzeitiges Zoomen aller angezeigten Bilder). Die Bilder können dann bequem mit Beschriftungen und Zeitangaben versehen werden.

Mit dem Stift-Tool im Bereich "Bildansicht" und dem Tab "Beschriftungen" im Bereich "Bildeigenschaften" kann das Bild neue Image-Map-Einträge erhalten. Nach Click auf das Select-Tool können die Imagemaps bewegt und skaliert werden.

Im Bereich "Bildgruppen" kann man neue Bildgruppen erstellen und bearbeiten. Ist eine Bildgruppe mit der Maus ausgewählt, kann man dieser per Drag&Drop im Bereich "Ausgewählte Bildgruppe" rechts unten neue Bilder hinzufügen. Die Bildgruppen entsprechen den späteren HTML-Seiten. "Publish" im Bildgruppen-Bereich bedeutet, dass diese Bildgruppe auch auf der HTML-Seite veröffentlicht wird. Mit "HTML-Seite erstellen" entsteht (im Anwendungsverzeichnis) eine neue Webseite, die alle Bilder, Thumbs usw. enthält.

Als Anwendungsverzeichnis zum Speichern der Dateien und Thumbnails entsteht beim Start der Anwendung ein neues Unterverzeichnis namens "PhotoCollector" im Ordner "Eigene Dateien". Es können leicht mehrere Foto-Sammlungen erstellt werden, indem man dieses Verzeichnis umbenennt. Eine so umbenannte Foto-Sammlung wird nach Doppelklick auf die darin enthaltene ".ph_xml-Datei" geöffnet.

In diesem Projekt habe ich ein Modul (Module1) verwendet, um gemeinsame Funktionen und Variablen zu definieren. Dort ist beispielsweise der Standard-Autor, UnbekanntDatumsAngabe, BildOrdnerPfad,ThumbOrdnerPfad festgelegt. In Module1 enthalten ist daneben die Funktion GetPictureRectangle, die ein Rechteck liefert, um ein Bild in ein vorhandenes Rechteck einzupassen.

Ganz interessant dürfte für manche die Verwendung eines Interface zum Festlegen einer Datumsangabe für ein Bild sein. Für ein Bild kann es mehr oder weniger vollständige Datumsangaben geben. Zum Beispiel. kann Jahr und Jahreszeit bekannt sein, oder nur das Jahr, oder nur das Jahrzehnt... Trotzdem sollen alle Bilder nach Datum sortiert werden können... Wer sich dafür interessiert, wie's funktioniert, sollte sich das Interface IDatumsAngabe und die Klassen in Basisklassen/Datumsangaben ansehen.

Viel mehr ist hier nicht zu erklären, bis darauf, dass ich auch fremde Quellen verwendet habe. Wesentliche Quellen für das ZoomPicBox-Control waren:
Color Matrix Demo von Steven Abbott (MSDN - "A Twist in Color Space") und Bob Powells Zoom and pan an image with the ZoomPicBox. Das ZoomListView-Control war im wesentlichen meine eigene Idee.

Nun viel Spass beim Ausprobieren und Stöbern, wenn jemand einen Fehler (mit Lösung) findet oder Ideen für Verbesserungen hat, immer her damit.

Grüsse, Thomas Bergner

thbergner@t-online.de

 

P.S.: Es muss noch darauf hingewiesen werden, dass einzelne PNGs () von IconBuffet stammen und speziellen Lizenzbedingungen unterliegen. Die Lizenzbedingungen sind hier weiter unten zu lesen, für die Einbindung in eigene Anwendungen also am besten eigene Icons verwenden.

The license DOES NOT permit the following uses: The Icons may not be sublicensed, resold, or otherwise made available for use or distribution separately or detached from a product, software application, or web page. The Icons may not be placed on any electronic bulletin board, or on-line in an complete, archived, downloadable format. You may not include The Icons in any electronic template or application, including those which are web based, where the purpose is to create multiple impressions of an electronic product, including, but not limited to website designs and presentation templates, or any other electronic matter or printed.

You may not use, or allow anyone else to use The Icons to create pornographic, libelous, obscene, or defamatory material.

You may not rent, transfer, or grant any rights to The Icons contained herein, or any compilation, derivative or collective work containing The Icons to any other person or organization without prior written consent of Firewheel Design. Using The Icons in a way not covered by this Agreement or that is specifically prohibited, without prior written consent from Firewheel Design is a violation of Federal copyright law. This license is in full force until it is terminated. If you do not comply with the terms and conditions above, the license automatically terminates.

The Icons are copyright Firewheel Design or its licensors and is protected by the United States Copyright laws, international treaty provisions and other applicable laws. No title or intellectual property rights in The Icons are transferred to you. Firewheel Design retains all rights not expressly granted by this license.

All royalty-free icons and files are provided "as is." You agree to hold Firewheel Design harmless for any damages that may occur due to use, or inability to use, icons or image data from IconBuffet.