This tutorial shows how to create a C# Windows Console application that uses the LEADTOOLS SDK to load and save annotation containers, as well as split an annotation container from a TIFF image.
| Overview | |
|---|---|
| Summary | This tutorial covers how to load, save, and split an annotation container in a Console C# Application. |
| Completion Time | 30 minutes |
| Visual Studio Project | Download tutorial project (1 KB) |
| Platform | C# Windows Console Application |
| IDE | Visual Studio 2017, 2019, 2022 |
| Development License | Download LEADTOOLS |
Before working on the Load, Save, and Split Annotations - Console C# tutorial, get familiar with the basic steps of creating a project by reviewing the Add References and Set a License tutorial.
Start with a copy of the project created in the Add References and Set a License tutorial. If you do not have that project, follow the steps in that tutorial to create it.
The references needed depend upon the purpose of the project. References can be added by one or the other of the following two methods (but not both). For this project, the following references are needed:
If NuGet references are used, this tutorial requires the following NuGet package:
Leadtools.Annotations.WinFormsIf local DLL references are used, the following DLLs are needed. The DLLs are located at <INSTALL_DIR>\LEADTOOLS23\Bin\net:
Leadtools.dllLeadtools.Annotations.Engine.dllLeadtools.Codecs.dllFor a complete list of which DLL files are required for your application, refer to Files to be Included in your Application.
The License unlocks the features needed for the project. It must be set before any toolkit function is called. For details including tutorials for different platforms, refer to Setting a Runtime License.
There are two types of runtime licenses:
Note: For details on how to properly add LEADTOOLS NuGet and local references, refer to the Add References and Set a License tutorial.
With the project created, the references added, and the license set, coding can begin.
In Solution Explorer, open Program.cs. Add a new method called LoadTifAnnotationsExample() and call it inside the Main method.
Add the following statements to the using block at the top of Program.cs:
// Using block at the topusing System;using Leadtools;using Leadtools.Codecs;using Leadtools.Annotations.Engine;
Add the below code to load the annotations from a TIFF file.
// Add this global variablestatic AnnContainer annContainer;
static void LoadTifAnnotationsExample(){// Load the annotations from the TIFF fileAnnCodecs annCodecs = new AnnCodecs();annContainer = annCodecs.Load(@"FILE PATH TO SAMPLE TestFileTifAnnotations.tif", 1);// Print out the objects in the container to show they are loadedConsole.WriteLine("ANNOTATIONS LOADED: From Test TIF File that Already Contained Annotations:\n");foreach (var annObject in annContainer.Children){Console.WriteLine($"Annotation: {annObject}");}Console.WriteLine("\n");}
In Program.cs, add a new method called SaveTifAnnotationsExample and call this method inside the Main method, under LoadTifAnnotationsExample(). Add the below code inside the new method to save the annotations to a new TIFF file.
static void SaveTifAnnotationsExample(){using RasterCodecs rasterCodecs = new RasterCodecs();AnnCodecs annCodecs = new();RasterTagMetadata tag = annCodecs.SaveToTag(annContainer, false);rasterCodecs.WriteTag(@"FILE PATH TO SAMPLE SaveAnnotationsToTif.tif", 1, tag);// Now load the annotations from the TIFF file we just saved to ensure they were saved correctlyAnnContainer savedTifContainer = annCodecs.Load(@"FILE PATH TO SAMPLE SaveAnnotationsToTif.tif", 1);// Print out the objects in the container to show they are loadedConsole.WriteLine("ANNOTATIONS LOADED: From TIFF File that we Saved Annotations to:\n");foreach (var annObject in savedTifContainer.Children){Console.WriteLine($"Annotation: {annObject}");}Console.WriteLine("\n");}
In Program.cs, add a new method called SplitContainerToTifAndXmlExample and call this method in the Main method, under SaveTifAnnotationsExample(). Add the below code to split the annotation container from the TIFF image and save it to a separate XML file.
static void SplitContainerToTifAndXmlExample(){// Save all the Rectangle annotations from the container to XMLAnnCodecs annCodecs = new AnnCodecs();AnnContainer xmlContainer = annContainer.Clone();for (int i = 0; i < xmlContainer.Children.Count; i++){if (xmlContainer.Children[i].Id != AnnObject.RectangleObjectId){xmlContainer.Children.Remove(xmlContainer.Children[i]);i--;}}annCodecs.Save(@"FILE PATH TO EXPORT RectangleAnnotationsXml.xml", xmlContainer, AnnFormat.Annotations, 1);// Now load the annotations from the XML file we just saved to ensure they were saved correctlyAnnContainer rectangleXmlContainer = annCodecs.Load(@"FILE PATH TO EXPORT RectangleAnnotationsXml.xml", 1);// Print out the objects in the container to show they are loadedConsole.WriteLine("ANNOTATIONS LOADED: From XML File that we Saved ONLY Rectangle Annotations to:");foreach (var annObject in rectangleXmlContainer.Children){Console.WriteLine($"Annotation: {annObject}");}Console.WriteLine("");// Save all the Note annotations from the container to TIFFAnnContainer tifContainer = annContainer.Clone();for (int i = 0; i < tifContainer.Children.Count; i++){if (tifContainer.Children[i].Id != AnnObject.NoteObjectId){tifContainer.Children.Remove(tifContainer.Children[i]);i--;}}using RasterCodecs rasterCodecs = new();RasterTagMetadata tag = annCodecs.SaveToTag(tifContainer, false);rasterCodecs.WriteTag(@"FILE PATH TO SAMPLE SaveJustNoteAnnotationsToTif.tif", 1, tag);// Now load the annotations from the XML file we just saved to ensure they were saved correctlyAnnContainer noteTifContainer = annCodecs.Load(@"FILE PATH TO SAMPLE SaveJustNoteAnnotationsToTif.tif", 1);// Print out the objects in the container to show they are loadedConsole.WriteLine("ANNOTATIONS LOADED: From TIFF File from which we Saved ONLY Note Annotations to:");foreach (var annObject in noteTifContainer.Children){Console.WriteLine($"Annotation: {annObject}");}Console.WriteLine("\n");}
Note: This tutorial sample uses a few existing TIFF files that you can download here. Be sure to replace the file paths in the above functions accordingly.
Run the project by pressing F5, or by selecting Debug -> Start Debugging.
If the steps were followed correctly, the console appears and displays the output, as shown in the following screenshot:

This tutorial showed how to add the necessary references to work with automated annotations and work with the AnnCodecs and AnnContainer classes.