using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Text; using System.Windows.Forms; using FreeImageAPI; using System.Runtime.InteropServices; using System.Security.Permissions; namespace Sample08 { public partial class SampleForm : Form { SerializationPlugin serialPlugin; [STAThread] static void Main() { // Check if FreeImage is available if (!FreeImage.IsAvailable()) { throw new Exception("FreeImage is not available!"); } Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new SampleForm()); } public SampleForm() { InitializeComponent(); FreeImageEngine.Message += new OutputMessageFunction(FreeImage_Message); // Creating a new instance of the plugin will register it automatically. serialPlugin = new SerializationPlugin(); } void FreeImage_Message(FREE_IMAGE_FORMAT fif, string message) { // Show the message MessageBox.Show(String.Format("Format: {0}\nMessage: {1}", fif, message), "FreeImage Message"); } private void bLoad_Click(object sender, EventArgs e) { // Create a new dialog instance OpenFileDialog ofd = new OpenFileDialog(); try { // Apply settings ofd.CheckPathExists = true; ofd.CheckFileExists = true; ofd.RestoreDirectory = true; ofd.Filter = "All files (*.*)|*.*"; // Get filename if (ofd.ShowDialog(this) == DialogResult.OK) { Bitmap bitmap = null; try { // Try loading the selected file // a ser-file will create an exception bitmap = (Bitmap)Bitmap.FromFile(ofd.FileName); } catch { MessageBox.Show("Unable to load bitmap from file.", "Error"); return; } // Unload old bitmap if (pictureBox.Image != null) { pictureBox.Image.Dispose(); } // Set new bitmap pictureBox.Image = bitmap; MessageBox.Show("Bitmap loaded successfully", "Success"); } else { MessageBox.Show("Action aborted."); } } finally { // Unload dialog ofd.Dispose(); } } private void LoadSerBitmap_Click(object sender, EventArgs e) { // Creat a new dialog OpenFileDialog ofd = new OpenFileDialog(); FIBITMAP dib = new FIBITMAP(); try { // Apply settings ofd.CheckPathExists = true; ofd.CheckFileExists = true; ofd.RestoreDirectory = true; ofd.Filter = "Serialized bitmap (*.ser)|*.ser"; // Get filename if (ofd.ShowDialog() == DialogResult.OK) { // Try loading the file forcing the new format dib = FreeImage.Load(serialPlugin.Format, ofd.FileName, FREE_IMAGE_LOAD_FLAGS.DEFAULT); if (dib.IsNull) { MessageBox.Show("Loading bitmap failed", "Error"); return; } // Convert the loaded bitmap into a .NET bitmap Bitmap bitmap = FreeImage.GetBitmap(dib); if (bitmap == null) { MessageBox.Show("Converting bitmap failed.", "Error"); return; } // Unload the picturebox if (pictureBox.Image != null) { pictureBox.Image.Dispose(); } // Apply the loaded bitmap pictureBox.Image = bitmap; MessageBox.Show("Bitmap loaded successfully", "Success"); } else { MessageBox.Show("Action aborted."); } } finally { // Unload bitmap FreeImage.UnloadEx(ref dib); // Unload dialog ofd.Dispose(); } } private void SaveToSer_Click(object sender, EventArgs e) { // Create a new dialog SaveFileDialog sfd = new SaveFileDialog(); FIBITMAP dib = new FIBITMAP(); try { // Check if the picture box contains a bitmap that can be saved. if (pictureBox.Image == null) { MessageBox.Show("No bitmap loaded.", "Error"); return; } // Convert the picture-boxes bitmap into a FreeImage bitmap. dib = FreeImage.CreateFromBitmap((Bitmap)pictureBox.Image); if (dib.IsNull) { MessageBox.Show("Unable to convert bitmap to FIBITMAP.", "Error"); return; } // Apply settings sfd.Filter = "Serialized bitmap (*.ser)|*.ser"; sfd.FileName = "Bitmap.ser"; sfd.OverwritePrompt = true; sfd.RestoreDirectory = true; // Get filename if (sfd.ShowDialog() == DialogResult.OK) { // Save bitmap in the new format if (FreeImage.SaveEx(dib, sfd.FileName, serialPlugin.Format)) MessageBox.Show("Bitmap saved successfully.", "Success"); else MessageBox.Show("Saving bitmap failed.", "Failure"); } else { MessageBox.Show("Action aborted."); } } finally { // Unload bitmap FreeImage.UnloadEx(ref dib); // Unload dialog sfd.Dispose(); } } private void bClearBitmap_Click(object sender, EventArgs e) { // Unload the picture-box if (pictureBox.Image != null) { pictureBox.Image.Dispose(); pictureBox.Image = null; } } } }