blob: d97f2eacdab5cbc9e416ddf9cd3be4f7642a71d7 [file] [log] [blame]
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);
}
}
}
}