Files
DSMeshConvert/DSTexCompress/FreeImage/Wrapper/FreeImage.NET/cs/Samples/Sample 08 - Creating a plugin/SampleForm.cs
2012-09-02 15:24:38 +02:00

217 lines
4.9 KiB
C#

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;
}
}
}
}