Har ni provat DeepZoomComposer?
Det har jag och det är inte så svårt att få till ett fotoalbum, importera bilder, sprid ut bilderna och exportera till t.ex. ett Silverlight-projekt.
Starta VS och kör projektet och vips så har du ett interaktivt fotoalbum.
Jag funderade sedan vidare ihop med Andreas om vi inte kunde göra ett Fotoalbum med flera album, ungefär som man har sina bilder i kataloger...
Det som behövdes var då ett sätt att autogenerera DeepZoom-filerna.
Efter en hel del googlande så fanns svaret rätt nära, nämligen som en DLL bland filerna i DeepZoomComposer-katalogen (DeepZoomTools.DLL).
Det fanns inte nån direkt hjälp om hur man göra så det var det bara att börja testa sig fram...
Referera DLL:en, hittade att namespacet var Microsoft.DeepZoomTools och där fanns lite trevliga klasser att leka med och följande verkade mest intressanta:
- Image - Används för att hantera en bild som ska läggas till i ett så kallat album.
- CollectionCreator - Genererar en kollektion av de bilder man laddar in i sitt album.
- SparseImageCreator - Genererar albumet som en bild.
Följande kodsnutt genererar en kollektion av två bilder:
//-------------------------
string Destination = "MyAlbum";
Collection<Microsoft.DeepZoomTools.Image> Images = new Collection<Microsoft.DeepZoomTools.Image>();
Images.Add(new Microsoft.DeepZoomTools.Image(".\\Images\\PC040248.JPG") { Dpi = new System.Windows.Point(1, 1), ViewportOrigin = new System.Windows.Point(-1, 0), ViewportWidth = 10 });
Images.Add(new Microsoft.DeepZoomTools.Image(".\\Images\\PB290059.JPG") { Dpi = new System.Windows.Point(1, 1), ViewportOrigin = new System.Windows.Point(-2, 0), ViewportWidth = 10 });
collectionCreator.Create(Images, Destination);
//-------------------------
Dpi borde vara DotPerInch, men jag har inte lyckats få den att spela någon roll...
ViewPostOrigin är den position som bilden ska få, det konstig är att både X och Y ska vara negativa för att hamna på skärmen.
Normalt är att origo (x=0, y=0) sitter i det övre vänsta hörnet på skärmen och det verkar också var fallet med DeepZoom, men sedan måste X vara negativt åt höger och Y negativt neråt.
ViewPortWidth är hur stor hela albumet ska vara då ViewportOrigin används.
Om ViewportWidth har ett stort värde så måste ViewportOrigin ha stora värden för att hamna längre in på skärmen.
Projektet som DeepZoomComposern skapade har antagligen följande i sin XAML:
<MultiScaleImage x:Name="msi"/>
Vilket är själva bakgrunden till albumet och det är denna msi som behöver få reda på mitt nya album, så jag kopierar in filerna i min ClientBin-katalog och ser till så att ett event kör följande kod:
msi.Source = new DeepZoomImageTileSource(new Uri("MyAlbum.xml", UriKind.Relative));
Och vips så visas mitt nya album istället...
Om ni får problem eller undrar över något så hör av till mig: Lars