Hello DeepZoomTools.DLL : Deep Zoom Image Tile Generation Made Easy
In our most recent release of Deep Zoom Composer, one of the major changes we made was to change how we generated the image tiles both for designing as well as exporting your Deep Zoom Content. In the past, ever since our first release at MIX, our image encoding was done using a combination of SparseImageTool.exe and ImageTool.exe command line tools. Starting with this release, we have retired those tools and have shifted to a preview version of a .NET based DLL that provides image generation capabilities.
If you look inside your Deep Zoom Composer installation folder, which is by default, [Program Files]\Microsoft Expression\Deep Zoom Composer, you will see a file called DeepZoomTools.dll:
This DLL contains all of the functionality needed for you to generate image tiles for compositions and collections. The classes and methods that you can use are as follows:
public enum ImageFormat { Jpg, Png, Wdp }; public class Image public Image(string path) public double MaxViewportWidth public double MinViewportWidth public string Path public Point ViewportOrigin public double ViewportWidth public class ImageCreator public ImageCreator() public double ImageQuality public int TileSize public int TileOverlap public ImageFormat TileFormat public bool CopyMetadata public void Create(string source, string destination) public class CollectionCreator public CollectionCreator() public double ImageQuality public int TileSize public int MaxLevel public ImageFormat TileFormat public bool CopyMetadata public void Create(ICollection<Image> images, string destination) public void Create(ICollection<string> images, string destination) public class SparseImageCreator public double ImageQuality public int TileSize public int TileOverlap public ImageFormat TileFormat public Color BackgroundColor public bool CopyMetadata public void Create(ICollection<Image> images, string destination) |
The API should be pretty straightforward. A DeepZoomTools.Image is the internal notion of a Deep Zoom image, and it contains all of the information such as the viewport widths, path to source image, origin, etc. ImageCreator is used to define an image and write the image tiles to disk. CollectionCreator and SparseImageCreator take a list of image paths and write the image tiles to disk.
When I was playing with this, the one thing that confused me was what CollectionCreator expected as its “image path”. It isn’t a string of paths to raw JPG, PNG, etc. files. It is actually a path to the Deep Zoom Image created via ImageCreator/SparseImageCreator. SparseImageCreator does take in a list of paths to the source image, so passing in a list of image files will work for generating sparse images (aka Compositions).
Do note that this DLL is a pre-release version, and the Live Labs team will decide when and how to more formally release this in the future. Even though Deep Zoom Composer uses this same DLL, there may be future releases of this DLL that are independent of Deep Zoom Composer releases.
Thanks,
Kirupa
Comments
Anonymous
November 26, 2008
In our most recent release of Deep Zoom Composer, one of the major changes we made was to change howAnonymous
November 26, 2008
Awesome, thanks for the introduction, it makes all the difference. Now we can do some very cool things with exisiting image collections :)Anonymous
November 27, 2008
Yesterday I saw that the Expression Blend and Design team had blogged about the new DeepZoomTool.dllAnonymous
November 27, 2008
The new DLL is much faster, and yes, this is an improvement. But I am it still fails about about image 80 when I try and load a 100 image project I created in an earlier version (100 tiles of 8K x 8K JPEG).Anonymous
November 27, 2008
Happy Thanksgiving everyone! In this issue: Martin Mihaylov, Tim Heuer, Katrien De Graeve, ExpressionAnonymous
November 27, 2008
Works great! However, I was thinking with this new setup I could parallelize the imagecreation part of the process...I used the Parallel extensions library and it works fine (90% cpu instead of 45%) as long as I don't enable copymetadata=true. When I enable this I get Cannot Write to Stream - {"Exception from HRESULT: 0x88982F71"} when calling the create method. Wondering if there is a way around this, I realize it has to do with STA and COM, but it sure would be nice to be able to do this. Thanks!Anonymous
November 27, 2008
Another question... I am getting an ArgumentOutOfRangeException on imagecreator.create() "Index was out of range. Must be non-negative and less than the size of the collection.rnParameter name: index" Works fine for about 400 images and then throws that... Any ideas why this would be happening?Anonymous
November 27, 2008
YSG - are you using Deep Zoom Composer or a custom app that directly talks to the DLL? If you are using Deep Zoom Composer, is the actual arrangement of images really important, or would a generic grid-like view suffice? The reason I ask is that I have a prototype of an application that just takes a folder of images, makes a collection out of it, and displays the images in a grid set programmatically. George - I am assuming that you are using a custom app for accessing the DLL. We have using the Parallel Extensions Library in the back of our list of things to do, but I haven't actually played with it enough to give you a better idea of why that error is being thrown. Is Copying Metadata something that is important to you? Generally, this is useful for copyright scenarios where each image tile would contain the licensing information. Also, Copying Metadata only works for JPEG files. PNG files are not supported yet. For your second question, I am really not sure what the answer would be. I will forward your question to a colleague who may know more, but because this is a holiday weekend for many of us, it may not be until early next week you get a response back.Anonymous
November 27, 2008
George - Would it be possible for you to post that image somewhere I can access? If not, feel free to e-mail it to me at kirupa@kirupa.com. Thanks, KirupaAnonymous
November 30, 2008
Hey guys... so if I make a program that makes use of the DLL... can I redistribute the DLL with the program? Cause I don't see it being installed in the GAC right now. Or I guess I could do it the roundabout way and tell the user to install DeepZoom Composer first, and then my program will go and look for the DLL to copy into the local application folder.Anonymous
November 30, 2008
Hi marauderz, This DLL is still a beta/pre-alpha version of what the Live Labs team is planning on doing in the future. While you can distribute the DLL with your app, do note that the DLL will be getting outdated very fast as we keep making updates and changes to it. Thanks, KirupaAnonymous
November 30, 2008
Well, all I need right now is for it to generate images and collections, so that's good enough for me! thanks for the info.Anonymous
December 02, 2008
Hi Kirupa, I do appreciate giving me a great product! I'm very happy with ImageCreator. Unfortunately, When i try to gerenate images using ViewportOrigin property with SparseImageCreator, i got "Image out of bounds" error. here is a simple codes. Microsoft.DeepZoomTools.SparseImageCreator s = new Microsoft.DeepZoomTools.SparseImageCreator(); s.CopyMetadata = false; s.TileFormat = Microsoft.DeepZoomTools.ImageFormat.Jpg; List<Microsoft.DeepZoomTools.Image> l = new List<Microsoft.DeepZoomTools.Image>(); double x = 0; foreach (FileInfo p in fies) { Microsoft.DeepZoomTools.Image i = new Microsoft.DeepZoomTools.Image(p.FullName); i.ViewportOrigin = new System.Windows.Point(x, x); l.Add(i); x += 0.1; } s.Create(l, Environment.CurrentDirectory + "\b.xml"); Could you please let me know how can i generate several images to deepzoom images.Anonymous
December 06, 2008
DJ - if you try multiplying the argument for y by -1, do you still get that error? I haven't played with SparseImageCreator a great deal, so I don't know for sure how to debug your problem yet. :)Anonymous
December 07, 2008
I'll try to send the files this week... Another nice addition would be a callback/event for the collectioncreator.create method to return status...it can take a long time to run so b eing able to inform the user where we are in the process would be great...Anonymous
December 07, 2008
George - that is actually a great suggestion! I will see what I can do about possibly supporting a callback on cc.create() to provide progress. :)Anonymous
December 08, 2008
Another thing I noticed, for large collections the cc.create() uses a huge amount of ram (for 10,000 images it gave me out of memory errors - it looked to be at about 2 gigs of ram, 8 gigs of swap)...is it trying to load all the images into memory at once?Anonymous
December 25, 2008
Hi Kirupa, I got a problem here: I run these simple codes and it work: Microsoft.DeepZoomTools.ImageCreator ic = new ImageCreator(); ic.Create("E:\ample.jpg", "E:\Sample.xml"); The problem is that after running this, I can't operate the original photo "E:\ample.jpg" any more, for example to rename it. OS says that the photo was operating by other proceeds. I stop the "Asp.Net Development Server", then it can be renamed. So would you tell me where the mistake is ? How can I dispose it? my email is mytsingh#hotmail.com. waiting for good news,sorry for bad english. :DAnonymous
January 01, 2009
Can I distribute DeepZoomTools.dll with my application? If so, can I get a signed version? Thank youAnonymous
January 01, 2009
Oh and Kirupa, I saw the same thing untill I specified a subdirectory for the target files: ic.Create(imgFileName, imgFileName.Replace(".jpg", "_files") + "" + Path.GetFileName(imgFileName).Replace(".jpg", ".xml"));Anonymous
January 13, 2009
The comment has been removedAnonymous
January 13, 2009
The comment has been removedAnonymous
January 13, 2009
The comment has been removedAnonymous
January 13, 2009
The comment has been removedAnonymous
January 14, 2009
First of all: THANKS for the DLL. I needed it for my project to generate DZ files! Though, I do have a problem with it. The DLL leaves the files it works with open. This is somehow bad as I have to delete the original file from which the DZ files where created from. Sometimes it helped to run the GC, but sometimes it doesn't. Here the code: var name = @"C:WindowsTEMP63216442-36e2-42b7-9986-b5d43ce89bebtmpfile.jpg"; var root = @"C:/TestGeneratedImages"; var output = Path.Combine(root, Path.GetFileNameWithoutExtension(name) + ".xml"); var creator = new ImageCreator{ TileFormat = ImageFormat.Jpg, TileOverlap = 1, TileSize = 256 }; creator.Create(name, output); var ccreator = new CollectionCreator { TileFormat = ImageFormat.Jpg, TileOverlap = 1, TileSize = 256 }; ccreator.Create(new List<string> { output }, Path.Combine(root, "dzc_output.xml")); creator = null; ccreator = null; System.GC.Collect(); -> File is still open... Can someone help here? Cheers, JensAnonymous
January 15, 2009
Hi JTH - i e-mailed the developer of this, and he mentions that making another GC.Collect() call should fix this. Let me know if that works. Thanks, KirupaAnonymous
January 15, 2009
Kirupa, I'm glad you are able to help JTH, but you didn't comment on my bug that I presented just before his. Do you have any thoughts?Anonymous
January 15, 2009
John - sorry about that. I get an e-mail notification whenever a comment gets made, and I must have missed the notification for your comment. I will look into your issue and try to post back shortly. If you find that I've forgotten, please feel free to e-mail me directly at kirupac[at]microsoft.com :) Thanks, KirupaAnonymous
January 21, 2009
In our most recent release of Deep Zoom Composer, one of the major changes we made was to change howAnonymous
January 23, 2009
Is there a substitute for those that still need to use SparseImageTool.exe? I updated the Composer to get the dll but also need the .exe with older code that we have.Anonymous
January 23, 2009
Hi Joaquin, No, there is no substitute for SparseImageTool.exe. We are strongly encouraging users to use this DLL in their projects instead. Is there some functionality that SparseImageTool.exe provided that you can't emulate with the updated DLL? Thanks, Kirupa :)Anonymous
January 23, 2009
Is there a signed version of the dll? I'd like to sign my application but can not because the DeepZoomTools.DLL is not strongly siged. Is there a signed vesrion? Thank you, PeterAnonymous
January 23, 2009
We currently don't have a signed version of the DLL available publically, I'll make sure that the next release of DZC will contain a signed version of this DLL. :)Anonymous
January 26, 2009
Hi Kirupa, The cli access to the tool. We are generating big PNGs (from drawings), a Scene xml file, and a batch script to make SparseImageTool.exe generate the slices of the scene for us.Anonymous
January 26, 2009
Hi Kirupa, The cli access to the tool. We are generating big PNGs (from drawings), a Scene xml file, and a batch script to make SparseImageTool.exe generate the slices of the scene for us. Also, I'm trying to use this DLL to add new images to a collection but the DLL is not generating the files that go in the dcz_output_files directory. Is there a way to use this dll to add elements to a scene or do I have to re-create the whole thing and then give it to the dll? ThanksAnonymous
February 02, 2009
Kirupa, thanks for the help. Though just adding another GC call did not help, I got it running by adding Thread.Sleep(0) after the first and a second GC call. It seems that this helped to really get rid of the objects that held the files open. Thanks, Jens http://www.finalcandidate.com/en/Pages/imagezoom.aspxAnonymous
February 16, 2009
The comment has been removedAnonymous
February 23, 2009
My issues with pixelWidth and pixelHeight for specific images went away with the latest release of DeepZoomTools.dll. Thanks MikeAnonymous
February 24, 2009
The comment has been removedAnonymous
May 28, 2009
hi there - many thanks for this. what is the difference between SparseImageCreator & CollectionCreator ? If I want to create a collection for use in a MSI which should I use ? Cheers, AndyAnonymous
May 28, 2009
Andy - You would use CollectionCreator :) The SparseImageCreator is used for sparse images - which is basically the non-collection output that Deep Zoom Composer supports. :PAnonymous
September 07, 2009
Hi Kirupa, Thank you for the fantastic job you have done with Deepzoom and Seadragon. I am using the DeepZoomTools.DLL to create the required tiles for my project. Is it possible to create the tiles in a flat hierarchy? So instead of grouping the tiles in the various folders such as 1, 2, 3, 4 etc you would actually rename the tiles as 1_0_0.jpg (where the first digit denotes the tile level.Anonymous
March 22, 2010
Hi Kirupa, First off, thanks for the great examples! Any input on this post?? http://forums.silverlight.net/forums/t/169921.aspx Using CollectionCreator.Create seems to be crashing if I have more than 100 jpgs. Any ideas for me to overcome the issue? Or should I be using something other than DeepZoomTools.dll for my requirement? Thanks so much!