217 lines
4.9 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
} |