using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; using FreeImageAPI; using FreeImageAPI.Metadata; namespace Sample10 { public partial class MainForm : Form { [STAThread] static void Main() { // Check if FreeImage.dll is available if (!FreeImage.IsAvailable()) { MessageBox.Show("FreeImage is not available. Aborting.", "Error"); } // Add this class to the FreeImage-Message-Callback FreeImageEngine.Message += new OutputMessageFunction(FreeImage_Message); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new MainForm()); } static void FreeImage_Message(FREE_IMAGE_FORMAT fif, string message) { // Display the data MessageBox.Show( String.Format("FreeImage-Message:\n{1}\nFormat:{0}", fif.ToString(), message), "FreeImage-Message"); } public MainForm() { InitializeComponent(); } private void bQuit_Click(object sender, EventArgs e) { Application.Exit(); } private void bLoad_Click(object sender, EventArgs e) { // Create variables OpenFileDialog ofd = new OpenFileDialog(); FIBITMAP dib = new FIBITMAP(); try { // Apply settings ofd.CheckFileExists = true; ofd.CheckPathExists = true; ofd.FileName = ""; ofd.Filter = "All files (*.*)|*.*"; ofd.Multiselect = false; ofd.RestoreDirectory = true; // Get image filename if (ofd.ShowDialog() == DialogResult.OK) { // Load the image dib = FreeImage.LoadEx(ofd.FileName); // Check if image was loaded successfully if (dib.IsNull) throw new Exception("Failed to load image."); // Clear the treeview tvMetadata.Nodes.Clear(); // Create a wrapper for all metadata the image contains ImageMetadata iMetadata = new ImageMetadata(dib); // Get each metadata model foreach (MetadataModel metadataModel in iMetadata) { // Create a new node for each model TreeNode modelNode = tvMetadata.Nodes.Add(metadataModel.ToString()); // Get each metadata tag and create a subnode for it foreach (MetadataTag metadataTag in metadataModel) { modelNode.Nodes.Add(metadataTag.Key + ": " + metadataTag.ToString()); } } } else { MessageBox.Show("Operation aborted.", "Aborted"); } } // Display error message catch (Exception ex) { while (ex.InnerException != null) ex = ex.InnerException; MessageBox.Show(ex.ToString(), "Exception caught"); } // Clean up finally { ofd.Dispose(); FreeImage.UnloadEx(ref dib); } } } }