This commit is contained in:
2012-09-02 15:24:38 +02:00
commit 5b667b5781
250 changed files with 70477 additions and 0 deletions

View File

@@ -0,0 +1,179 @@
using System;
using System.IO;
using FreeImageAPI;
using System.Collections.Generic;
using System.Runtime.Serialization.Formatters.Binary;
using System.Drawing;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;
namespace Sample01
{
class Program
{
static void Main(string[] args)
{
// Check if FreeImage.dll is available (can be in %path%).
if (!FreeImage.IsAvailable())
{
Console.WriteLine("FreeImage.dll seems to be missing. Aborting.");
return;
}
Sample sample = new Sample();
// This example shows the basic loading and saving operations offered by FreeImage.
sample.Example01();
// This example shows a more comfortable way offered by the .NET Wrapper.
sample.Example02();
// This example shows the FreeImage-Errormessage-Callback
sample.Example03();
}
}
public class Sample
{
const string fileName = @"Sample.jpg";
const string outFileName = @"Sample.tif";
FIBITMAP dib = new FIBITMAP();
string message = null;
public void Example01()
{
if (!File.Exists(fileName))
{
Console.WriteLine(fileName + " does not exist. Aborting.");
return;
}
// Try to unload the bitmap handle (in case it is not null).
// Always assert that a handle (like dib) is unloaded before it is reused, because
// on unmanaged side there is no garbage collector that will clean up unreferenced
// objects.
// The following code will produce a memory leak (in case the bitmap is loaded
// successfully) because the handle to the first bitmap is lost:
// dib = FreeImage.Load(FREE_IMAGE_FORMAT.FIF_JPEG, fileName, FREE_IMAGE_LOAD_FLAGS.JPEG_ACCURATE);
// dib = FreeImage.Load(FREE_IMAGE_FORMAT.FIF_JPEG, fileName, FREE_IMAGE_LOAD_FLAGS.JPEG_ACCURATE);
if (!dib.IsNull)
FreeImage.Unload(dib);
// Loading a sample bitmap. In this case it's a .jpg file. 'Load' requires the file
// format or the loading process will fail. An additional flag (the default value is
// 'DEFAULT') can be set to enable special loading options.
dib = FreeImage.Load(FREE_IMAGE_FORMAT.FIF_JPEG, fileName, FREE_IMAGE_LOAD_FLAGS.JPEG_ACCURATE);
// Check if the handle is null which means the bitmap could not be loaded.
if (dib.IsNull)
{
Console.WriteLine("Loading bitmap failed. Aborting.");
// Check whether there was an error message.
return;
}
// Try flipping the bitmap.
if (!FreeImage.FlipHorizontal(dib))
{
Console.WriteLine("Unable to flip bitmap.");
// Check whether there was an error message.
}
// Store the bitmap back to disk. Again the desired format is needed. In this case the format is 'TIFF'.
// An output filename has to be chosen (which will be overwritten without a warning).
// A flag can be provided to enable pluginfunctions (compression is this case).
FreeImage.Save(FREE_IMAGE_FORMAT.FIF_TIFF, dib, outFileName, FREE_IMAGE_SAVE_FLAGS.TIFF_DEFLATE);
// The bitmap was saved to disk but is still allocated in memory, so the handle has to be freed.
if (!dib.IsNull)
FreeImage.Unload(dib);
// Make sure to set the handle to null so that it is clear that the handle is not pointing to a bitmap.
dib.SetNull();
}
public void Example02()
{
// 'UnloadEx' is a comfortable way of unloading a bitmap. The coder can call 'UnloadEx' even
// when the handle is pointing to null (in this case nothing will happen). In case the handle
// is valid (valid means that it is NOT pointing to null) the bitmap will be unloaded and the
// handle will be set to null manually.
FreeImage.UnloadEx(ref dib);
// 'LoadEx' is a comfortable way of loading a bitmap. 'LoadEx' tries to find out the format of
// the file and will use this to load it. It will use DEFAULT loading values.
dib = FreeImage.LoadEx(fileName);
// Check if the handle is null which means the bitmap could not be loaded.
if (dib.IsNull)
{
Console.WriteLine("Loading bitmap failed. Aborting.");
return;
}
// 'SaveEx' (like 'LoadEx') will try to save the bitmap with default values.
// Before saving the bitmap, 'SaveEx' checks whether the extension is valid for the file type
// and if the plugin can use the colordepth of the bitmap. If not it will automatically convert
// the bitmap into the next best colordepth and save it.
if (!FreeImage.SaveEx(ref dib, @"Sample.gif", false))
{
Console.WriteLine("Saving bitmap failed.");
}
// The handle is still valid.
if (!FreeImage.SaveEx(
ref dib,
@"Sample", // No extension was selected so let 'SaveEx' decide.
FREE_IMAGE_FORMAT.FIF_PNG, // A format is needed this time.
FREE_IMAGE_SAVE_FLAGS.DEFAULT, // PNG has no options so use default.
FREE_IMAGE_COLOR_DEPTH.FICD_04_BPP, // 4bpp as result color depth.
true)) // We're done so unload
{
// SaveEx will not unload the bitmap in case saving failed.
// This way possible operations done to the bitmaps aren't lost.
FreeImage.UnloadEx(ref dib);
}
}
public void Example03()
{
// Safely unload to prevent memory leak.
FreeImage.UnloadEx(ref dib);
// Load the example bitmap.
dib = FreeImage.LoadEx(fileName);
// Check whether loading succeeded.
if (dib.IsNull)
{
return;
}
// Add this class to the callback event.
FreeImageEngine.Message += new OutputMessageFunction(FreeImage_Message);
// Try to save the bitmap as a gif
if (!FreeImage.Save(FREE_IMAGE_FORMAT.FIF_GIF, dib, @"Sample_fail.gif", FREE_IMAGE_SAVE_FLAGS.DEFAULT))
{
// Saving failed
// Check whether there was an error callback
if (message != null)
{
// Print the message and delete it.
Console.WriteLine("Error message recieved: {0}", message);
message = null;
}
}
// Unload bitmap.
FreeImage.UnloadEx(ref dib);
// Remove this class from the callback event.
FreeImageEngine.Message -= new OutputMessageFunction(FreeImage_Message);
}
void FreeImage_Message(FREE_IMAGE_FORMAT fif, string message)
{
this.message = message;
}
}
}

View File

@@ -0,0 +1,16 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
[assembly: AssemblyTitle("")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: ComVisible(false)]
[assembly: Guid("ac0569fe-c021-4f40-bfe9-275baf0fd21a")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,103 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.50727</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{0D294AB6-FAD4-4364-AAB6-43C1796116A9}</ProjectGuid>
<OutputType>Exe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Sample01</RootNamespace>
<AssemblyName>Sample01</AssemblyName>
<StartupObject>
</StartupObject>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<UseVSHostingProcess>false</UseVSHostingProcess>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>none</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<UseVSHostingProcess>false</UseVSHostingProcess>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<Optimize>true</Optimize>
<DebugType>
</DebugType>
<PlatformTarget>x86</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<Optimize>true</Optimize>
<DebugType>
</DebugType>
<PlatformTarget>x64</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<ItemGroup>
<Reference Include="FreeImageNET, Version=3.11.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\Bin\FreeImageNET.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Drawing" />
</ItemGroup>
<ItemGroup>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<None Include="Sample.jpg">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 KiB

View File

@@ -0,0 +1,140 @@
using System;
using System.IO;
using FreeImageAPI;
namespace Sample02
{
class Program
{
static void Main(string[] args)
{
// Check if FreeImage.dll is available (can be in %path%).
if (!FreeImage.IsAvailable())
{
Console.WriteLine("FreeImage.dll seems to be missing. Aborting.");
return;
}
Sample sample = new Sample();
sample.Example();
}
}
public class Sample
{
const string fileName = @"multipaged.tif";
FIMULTIBITMAP dib = new FIMULTIBITMAP();
Random rand = new Random();
public void Example()
{
if (!File.Exists(fileName))
{
Console.WriteLine("File not found. Aborting.");
return;
}
// Load the multipaged bitmap.
// 'OpenMultiBitmapEx' tries to find the correct file format, loads the bitmap
// with default options, with write support and does not use caching.
dib = FreeImage.OpenMultiBitmapEx(fileName);
// Check whether loading succeeded.
if (dib.IsNull)
{
Console.WriteLine("File could not be loaded. Aborting.");
return;
}
// Get the number of bitmaps the multipaged bitmap contains.
int count = FreeImage.GetPageCount(dib);
// Multipaged bitmaps consist of multiple single FIBITMAPs
FIBITMAP page = new FIBITMAP();
// There are bitmaps we can work with.
if (count > 0)
{
// Lock a random bitmap to work with.
page = FreeImage.LockPage(dib, rand.Next(0, count));
}
// Check whether locking succeeded.
if (page.IsNull)
{
// Locking failed. Unload the bitmap and return.
FreeImage.CloseMultiBitmapEx(ref dib);
return;
}
// Get a list of locked pages. This can be usefull to check whether a page has already been locked.
int[] lockedPages = FreeImage.GetLockedPages(dib);
// Lets modify the page.
if (FreeImage.AdjustGamma(page, 2d))
{
Console.WriteLine("Successfully changed gamma of page {0}.", lockedPages[0]);
}
else
{
Console.WriteLine("Failed to adjust gamma ...");
}
// Print out the list of locked pages
foreach (int i in lockedPages)
Console.WriteLine("Page {0} is locked.", i);
// Use 'UnlockPage' instead of 'Unload' to free the page. Set the third parameter to 'true'
// so that FreeImage can store the changed page within the multipaged bitmap.
FreeImage.UnlockPage(dib, page, true);
// Retieve the list again to see whether unlocking succeeded.
lockedPages = FreeImage.GetLockedPages(dib);
// No output should be produced here.
foreach (int i in lockedPages)
Console.WriteLine("Page {0} is still locked.", i);
// If there are more than one page we can swap them
if (count > 1)
{
if (!FreeImage.MovePage(dib, 1, 0))
{
Console.WriteLine("Swapping pages failed.");
}
}
if (count > 2)
{
// Lock page 2
page = FreeImage.LockPage(dib, 2);
if (!page.IsNull)
{
// Clone the page for later appending
FIBITMAP temp = FreeImage.Clone(page);
// Unlock the page again
FreeImage.UnlockPage(dib, page, false);
// Delete the page form the multipaged bitmap
FreeImage.DeletePage(dib, 2);
// Append the clone again
FreeImage.AppendPage(dib, temp);
// Check whether the number of pages is still the same
Console.WriteLine("Pages before: {0}. Pages after: {1}", count, FreeImage.GetPageCount(dib));
// Unload clone to prevent memory leak
FreeImage.UnloadEx(ref temp);
}
}
// We are done and close the multipaged bitmap.
if (!FreeImage.CloseMultiBitmapEx(ref dib))
{
Console.WriteLine("Closing bitmap failed!");
}
}
}
}

View File

@@ -0,0 +1,16 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
[assembly: AssemblyTitle("")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: ComVisible(false)]
[assembly: Guid("35960522-c01a-40d2-a86b-37b9839b131c")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,95 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.50727</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{AF8B72BD-1A8B-4E6B-A0F1-0BD57497777B}</ProjectGuid>
<OutputType>Exe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Sample02</RootNamespace>
<AssemblyName>Sample02</AssemblyName>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<UseVSHostingProcess>false</UseVSHostingProcess>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>none</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<UseVSHostingProcess>false</UseVSHostingProcess>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>
</DebugType>
<PlatformTarget>x86</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>
</DebugType>
<PlatformTarget>x64</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<ItemGroup>
<Reference Include="FreeImageNET, Version=3.11.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\Bin\FreeImageNET.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Drawing" />
</ItemGroup>
<ItemGroup>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<None Include="multipaged.tif">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -0,0 +1,74 @@
using System;
using System.IO;
using FreeImageAPI;
namespace Sample03
{
class Program
{
static void Main(string[] args)
{
// Check if FreeImage.dll is available (can be in %path%).
if (!FreeImage.IsAvailable())
{
Console.WriteLine("FreeImage.dll seems to be missing. Aborting.");
return;
}
// Add this class to the message event
FreeImageEngine.Message += new OutputMessageFunction(FreeImage_Message);
Sample sample = new Sample();
sample.Example();
// Remove this class from the message event
FreeImageEngine.Message -= new OutputMessageFunction(FreeImage_Message);
}
static void FreeImage_Message(FREE_IMAGE_FORMAT fif, string message)
{
Console.WriteLine("Error for {0}: {1}", fif.ToString(), message);
}
}
public class Sample
{
FIBITMAP dib = new FIBITMAP();
public void Example()
{
// Allocating a new bitmap with 99x99 pixels, 16-bit color depth and an allocation of 5 bits for each color.
dib = FreeImage.Allocate(99, 99, 16, FreeImage.FI16_555_RED_MASK, FreeImage.FI16_555_GREEN_MASK, FreeImage.FI16_555_BLUE_MASK);
// Saving bitmap.
if (!FreeImage.SaveEx(ref dib, "example01.bmp", true))
{
Console.WriteLine("Saving 'example.bmp' failed.");
FreeImage.UnloadEx(ref dib);
}
// Allocation a new bitmap with 71x33 pixels, 4-bit color depth. Bitmaps below 16-bit have paletts.
// Each pixel references an index within the palette wich contains the true color.
// Therefor no bit-masks are needed and can be set to 0.
dib = FreeImage.Allocate(71, 33, 4, 0, 0, 0);
// Saving bitmap.
if (!FreeImage.SaveEx(ref dib, "example02.tif", true))
{
Console.WriteLine("Saving 'example02.tif' failed.");
FreeImage.UnloadEx(ref dib);
}
// Allocation a new bitmap. This time 'AllocateT' is used because 'Allocate' can only create standard bitmaps.
// In this case a RGBF bitmap is created. Red, green and blue are represented by a float-value so no bit-masks are needed.
dib = FreeImage.AllocateT(FREE_IMAGE_TYPE.FIT_RGBF, 50, 75, 9, 0, 0, 0);
// Saving bitmap.
if (!FreeImage.SaveEx(ref dib, "example03.hdr", true))
{
Console.WriteLine("Saving 'example03.hdr' failed.");
FreeImage.UnloadEx(ref dib);
}
}
}
}

View File

@@ -0,0 +1,16 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
[assembly: AssemblyTitle("")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: ComVisible(false)]
[assembly: Guid("7139f1dc-3312-4c76-aeb3-891f869409b3")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,89 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.50727</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{A7E452A1-1A43-47C4-8BF3-DA28E1402FB9}</ProjectGuid>
<OutputType>Exe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Sample03</RootNamespace>
<AssemblyName>Sample03</AssemblyName>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<UseVSHostingProcess>false</UseVSHostingProcess>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>none</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<UseVSHostingProcess>false</UseVSHostingProcess>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>
</DebugType>
<PlatformTarget>x86</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>
</DebugType>
<PlatformTarget>x64</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<ItemGroup>
<Reference Include="FreeImageNET, Version=3.11.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\Bin\FreeImageNET.dll</HintPath>
</Reference>
<Reference Include="System" />
</ItemGroup>
<ItemGroup>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -0,0 +1,205 @@
namespace Sample04
{
partial class MainForm
{
/// <summary>
/// Erforderliche Designervariable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Verwendete Ressourcen bereinigen.
/// </summary>
/// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Vom Windows Form-Designer generierter Code
/// <summary>
/// Erforderliche Methode für die Designerunterstützung.
/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
/// </summary>
private void InitializeComponent()
{
this.ofd = new System.Windows.Forms.OpenFileDialog();
this.bOpenFile = new System.Windows.Forms.Button();
this.lWidth = new System.Windows.Forms.Label();
this.lHeight = new System.Windows.Forms.Label();
this.lBPP = new System.Windows.Forms.Label();
this.lRedMask = new System.Windows.Forms.Label();
this.lGreenMask = new System.Windows.Forms.Label();
this.lBlueMask = new System.Windows.Forms.Label();
this.lImageType = new System.Windows.Forms.Label();
this.lDPIY = new System.Windows.Forms.Label();
this.lDPIX = new System.Windows.Forms.Label();
this.lFormat = new System.Windows.Forms.Label();
this.lHeader = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// ofd
//
this.ofd.Filter = "All files (*.*)|*.*";
//
// bOpenFile
//
this.bOpenFile.Location = new System.Drawing.Point(12, 358);
this.bOpenFile.Name = "bOpenFile";
this.bOpenFile.Size = new System.Drawing.Size(75, 23);
this.bOpenFile.TabIndex = 4;
this.bOpenFile.Text = "Open file";
this.bOpenFile.UseVisualStyleBackColor = true;
this.bOpenFile.Click += new System.EventHandler(this.bOpenFile_Click);
//
// lWidth
//
this.lWidth.AutoSize = true;
this.lWidth.Location = new System.Drawing.Point(9, 51);
this.lWidth.Name = "lWidth";
this.lWidth.Size = new System.Drawing.Size(46, 16);
this.lWidth.TabIndex = 0;
this.lWidth.Text = "Width:";
//
// lHeight
//
this.lHeight.AutoSize = true;
this.lHeight.Location = new System.Drawing.Point(9, 76);
this.lHeight.Name = "lHeight";
this.lHeight.Size = new System.Drawing.Size(53, 16);
this.lHeight.TabIndex = 1;
this.lHeight.Text = "Height: ";
//
// lBPP
//
this.lBPP.AutoSize = true;
this.lBPP.Location = new System.Drawing.Point(9, 101);
this.lBPP.Name = "lBPP";
this.lBPP.Size = new System.Drawing.Size(80, 16);
this.lBPP.TabIndex = 2;
this.lBPP.Text = "Color Depth:";
//
// lRedMask
//
this.lRedMask.AutoSize = true;
this.lRedMask.Location = new System.Drawing.Point(9, 129);
this.lRedMask.Name = "lRedMask";
this.lRedMask.Size = new System.Drawing.Size(68, 16);
this.lRedMask.TabIndex = 3;
this.lRedMask.Text = "Red Mask:";
//
// lGreenMask
//
this.lGreenMask.AutoSize = true;
this.lGreenMask.Location = new System.Drawing.Point(9, 188);
this.lGreenMask.Name = "lGreenMask";
this.lGreenMask.Size = new System.Drawing.Size(80, 16);
this.lGreenMask.TabIndex = 5;
this.lGreenMask.Text = "Green Mask:";
//
// lBlueMask
//
this.lBlueMask.AutoSize = true;
this.lBlueMask.Location = new System.Drawing.Point(9, 158);
this.lBlueMask.Name = "lBlueMask";
this.lBlueMask.Size = new System.Drawing.Size(70, 16);
this.lBlueMask.TabIndex = 6;
this.lBlueMask.Text = "Blue Mask:";
//
// lImageType
//
this.lImageType.AutoSize = true;
this.lImageType.Location = new System.Drawing.Point(9, 215);
this.lImageType.Name = "lImageType";
this.lImageType.Size = new System.Drawing.Size(81, 16);
this.lImageType.TabIndex = 7;
this.lImageType.Text = "Image Type:";
//
// lDPIY
//
this.lDPIY.AutoSize = true;
this.lDPIY.Location = new System.Drawing.Point(9, 244);
this.lDPIY.Name = "lDPIY";
this.lDPIY.Size = new System.Drawing.Size(43, 16);
this.lDPIY.TabIndex = 8;
this.lDPIY.Text = "DPI Y:";
//
// lDPIX
//
this.lDPIX.AutoSize = true;
this.lDPIX.Location = new System.Drawing.Point(9, 273);
this.lDPIX.Name = "lDPIX";
this.lDPIX.Size = new System.Drawing.Size(44, 16);
this.lDPIX.TabIndex = 9;
this.lDPIX.Text = "DPI X:";
//
// lFormat
//
this.lFormat.AutoSize = true;
this.lFormat.Location = new System.Drawing.Point(9, 302);
this.lFormat.Name = "lFormat";
this.lFormat.Size = new System.Drawing.Size(78, 16);
this.lFormat.TabIndex = 10;
this.lFormat.Text = "File Format:";
//
// lHeader
//
this.lHeader.AutoSize = true;
this.lHeader.Location = new System.Drawing.Point(117, 19);
this.lHeader.Name = "lHeader";
this.lHeader.Size = new System.Drawing.Size(162, 16);
this.lHeader.TabIndex = 11;
this.lHeader.Text = "Bitmap-Information Viewer";
//
// MainForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 16F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(400, 393);
this.Controls.Add(this.lHeader);
this.Controls.Add(this.lFormat);
this.Controls.Add(this.lDPIX);
this.Controls.Add(this.lDPIY);
this.Controls.Add(this.lImageType);
this.Controls.Add(this.lBlueMask);
this.Controls.Add(this.lGreenMask);
this.Controls.Add(this.bOpenFile);
this.Controls.Add(this.lRedMask);
this.Controls.Add(this.lBPP);
this.Controls.Add(this.lHeight);
this.Controls.Add(this.lWidth);
this.Font = new System.Drawing.Font("Tahoma", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "MainForm";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Sample04";
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.OpenFileDialog ofd;
private System.Windows.Forms.Button bOpenFile;
private System.Windows.Forms.Label lWidth;
private System.Windows.Forms.Label lHeight;
private System.Windows.Forms.Label lBPP;
private System.Windows.Forms.Label lRedMask;
private System.Windows.Forms.Label lGreenMask;
private System.Windows.Forms.Label lBlueMask;
private System.Windows.Forms.Label lImageType;
private System.Windows.Forms.Label lDPIY;
private System.Windows.Forms.Label lDPIX;
private System.Windows.Forms.Label lFormat;
private System.Windows.Forms.Label lHeader;
}
}

View File

@@ -0,0 +1,120 @@
using System;
using System.Windows.Forms;
using FreeImageAPI;
namespace Sample04
{
public partial class MainForm : Form
{
string message = null;
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
public MainForm()
{
InitializeComponent();
FreeImageEngine.Message += new OutputMessageFunction(FreeImage_Message);
}
~MainForm()
{
FreeImageEngine.Message -= new OutputMessageFunction(FreeImage_Message);
}
void FreeImage_Message(FREE_IMAGE_FORMAT fif, string message)
{
if (this.message == null)
{
this.message = message;
}
else
{
this.message += "\n" + message;
}
}
private void bOpenFile_Click(object sender, EventArgs e)
{
// Resetting filename
ofd.FileName = "";
// Was a file selected
if (ofd.ShowDialog() == DialogResult.OK)
{
// Format is stored in 'format' on successfull load.
FREE_IMAGE_FORMAT format = FREE_IMAGE_FORMAT.FIF_UNKNOWN;
// Try loading the file
FIBITMAP dib = FreeImage.LoadEx(ofd.FileName, ref format);
try
{
// Error handling
if (dib.IsNull)
{
// Chech whether FreeImage generated an error messe
if (message != null)
{
MessageBox.Show("File could not be loaded!\nError:{0}", message);
}
else
{
MessageBox.Show("File could not be loaded!", message);
}
return;
}
// Read width
lWidth.Text = String.Format("Width: {0}", FreeImage.GetWidth(dib));
// Read height
lHeight.Text = String.Format("Width: {0}", FreeImage.GetWidth(dib));
// Read color depth
lBPP.Text = String.Format("Color Depth: {0}", FreeImage.GetBPP(dib));
// Read red bitmask (16 - 32 bpp)
lRedMask.Text = String.Format("Red Mask: 0x{0:X8}", FreeImage.GetRedMask(dib));
// Read green bitmask (16 - 32 bpp)
lBlueMask.Text = String.Format("Green Mask: 0x{0:X8}", FreeImage.GetGreenMask(dib));
// Read blue bitmask (16 - 32 bpp)
lGreenMask.Text = String.Format("Blue Mask: 0x{0:X8}", FreeImage.GetBlueMask(dib));
// Read image type (FI_BITMAP, FIT_RGB16, FIT_COMPLEX ect)
lImageType.Text = String.Format("Image Type: {0}", FreeImage.GetImageType(dib));
// Read x-axis dpi
lDPIX.Text = String.Format("DPI X: {0}", FreeImage.GetResolutionX(dib));
// Read y-axis dpi
lDPIY.Text = String.Format("DPI Y: {0}", FreeImage.GetResolutionY(dib));
// Read file format
lFormat.Text = String.Format("File Format: {0}", FreeImage.GetFormatFromFIF(format));
}
catch
{
}
// Always unload bitmap
FreeImage.UnloadEx(ref dib);
// Reset the error massage buffer
message = null;
}
// No file was selected
else
{
MessageBox.Show("No file loaded.", "Error");
}
}
}
}

View File

@@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="ofd.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

View File

@@ -0,0 +1,16 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
[assembly: AssemblyTitle("")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: ComVisible(false)]
[assembly: Guid("7c8fdc9a-a8f9-4996-99c8-9df47513edeb")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,102 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.50727</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{1F4BCDD7-5BD9-4237-8B14-C52B2A9FF52A}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Sample04</RootNamespace>
<AssemblyName>Sample04</AssemblyName>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<UseVSHostingProcess>false</UseVSHostingProcess>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>none</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<UseVSHostingProcess>false</UseVSHostingProcess>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>
</DebugType>
<PlatformTarget>x86</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>
</DebugType>
<PlatformTarget>x64</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<ItemGroup>
<Reference Include="FreeImageNET, Version=3.11.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\Bin\FreeImageNET.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
</ItemGroup>
<ItemGroup>
<Compile Include="MainForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="MainForm.Designer.cs">
<DependentUpon>MainForm.cs</DependentUpon>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="MainForm.resx">
<SubType>Designer</SubType>
<DependentUpon>MainForm.cs</DependentUpon>
</EmbeddedResource>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -0,0 +1,213 @@
using System;
using FreeImageAPI;
using System.Drawing;
namespace Sample05
{
class Program
{
static void Main(string[] args)
{
// Check if FreeImage.dll is available (can be in %path%).
if (!FreeImage.IsAvailable())
{
Console.WriteLine("FreeImage.dll seems to be missing. Aborting.");
return;
}
Sample sample = new Sample();
// The example will flip the bitmap by manually accessing the
// bitmaps scanlines and swapping them
sample.Example01();
// The example will access each pixel of the bitmap manually
// and change its color intensity to 3/4 of the original value
// which will have a darker bitmap as result.
sample.Example02();
// The example will access and swap the bitmaps palette from
// 'FIC_MINISBLACK' to 'FIC_MINISWHITE'. Then it will swap each pixels
// palette index so that each pixel is assigned to the its old value
// so that the bitmaps "pixeldata" stays the same.
sample.Example03();
}
}
public class Sample
{
FIBITMAP dib = new FIBITMAP();
public void Example01()
{
// Load sample file
dib = FreeImage.LoadEx("Sample.jpg", FREE_IMAGE_LOAD_FLAGS.JPEG_ACCURATE);
// Check whether loading succeeded
if (dib.IsNull)
{
Console.WriteLine("Sample.jpg could not be loaded. Aborting.");
return;
}
// Check whether the bitmap has 24 bpp color depth to ensure
// using RGBTRIPPLE is correct.
if (FreeImage.GetBPP(dib) != 24)
{
Console.WriteLine("Sample.jpg is no 24 bpp bitmap. Aborting.");
FreeImage.UnloadEx(ref dib);
return;
}
// Store height of the bitmap
int height = (int)FreeImage.GetHeight(dib);
// Iterate over half of the bitmaps scanlines and swap
// line[1] with line[height], line[2] with line[height-1] etc which will
// flip the image.
for (int i = 0; i < (height / 2); i++)
{
// Get scanline from the bottom part of the bitmap
Scanline<RGBTRIPLE> scanlineBottom = new Scanline<RGBTRIPLE>(dib, i);
// Get scanline from the top part of the bitmap
Scanline<RGBTRIPLE> scanlineTop = new Scanline<RGBTRIPLE>(dib, height - 1 - i);
// Get arrays of RGBTRIPPLEs that contain the bitmaps real pixel data
// of the two scanlines.
RGBTRIPLE[] rgbtBottom = scanlineBottom.Data;
RGBTRIPLE[] rgbtTop = scanlineTop.Data;
// Restore the scanline across to switch the bitmaps lines.
scanlineBottom.Data = rgbtTop;
scanlineTop.Data = rgbtBottom;
}
// Store the bitmap to disk
if (!FreeImage.SaveEx(ref dib, "SampleOut01.jpg", FREE_IMAGE_SAVE_FLAGS.JPEG_QUALITYGOOD, true))
{
Console.WriteLine("Error while saving 'SampleOut01.jpg'");
FreeImage.UnloadEx(ref dib);
}
}
public void Example02()
{
dib = FreeImage.LoadEx("Sample.jpg", FREE_IMAGE_LOAD_FLAGS.JPEG_ACCURATE);
// Check whether loading succeeded
if (dib.IsNull)
{
Console.WriteLine("Sample.jpg could not be loaded. Aborting.");
return;
}
// Check whether the bitmap has 24 bpp color depth to ensure
// using RGBTRIPPLE is correct.
if (FreeImage.GetBPP(dib) != 24)
{
Console.WriteLine("Sample.jpg is no 24 bpp bitmap. Aborting.");
FreeImage.UnloadEx(ref dib);
return;
}
// Iterate over all scanlines
for (int i = 0; i < FreeImage.GetHeight(dib); i++)
{
// Get scanline
Scanline<RGBTRIPLE> scanline = new Scanline<RGBTRIPLE>(dib, i);
// Get pixeldata from scanline
RGBTRIPLE[] rgbt = scanline.Data;
// Iterate over each pixel reducing the colors intensity to 3/4 which
// will darken the bitmap.
for (int j = 0; j < rgbt.Length; j++)
{
rgbt[j].rgbtBlue = (byte)((int)rgbt[j].rgbtBlue * 3 / 4);
rgbt[j].rgbtGreen = (byte)((int)rgbt[j].rgbtGreen * 3 / 4);
rgbt[j].rgbtRed = (byte)((int)rgbt[j].rgbtRed * 3 / 4);
// In case no direct access to the data is implemented
// the following way is equivalent:
//
// Color color = rgbt[j].color;
// rgbt[j].color = Color.FromArgb(color.R * 3 / 4, color.G * 3 / 4, color.B * 3 / 4);
}
// Write the darkened scanline back to memory
scanline.Data = rgbt;
}
// Store the bitmap to disk
if (!FreeImage.SaveEx(ref dib, "SampleOut02.jpg", FREE_IMAGE_SAVE_FLAGS.JPEG_QUALITYGOOD, true))
{
Console.WriteLine("Error while saving 'SampleOut02.jpg'");
FreeImage.UnloadEx(ref dib);
}
}
public void Example03()
{
dib = FreeImage.LoadEx("Sample.tif");
// Check whether loading succeeded
if (dib.IsNull)
{
Console.WriteLine("Sample.tif could not be loaded. Aborting.");
return;
}
// Check whether the bitmap has 4 bpp color depth to ensure
// using FI4B is correct.
if (FreeImage.GetBPP(dib) != 4)
{
Console.WriteLine("Sample.tif is no 4 bpp bitmap. Aborting.");
FreeImage.UnloadEx(ref dib);
return;
}
// Get the bitmaps palette
Palette palette = FreeImage.GetPaletteEx(dib);
int size = (int)palette.Length;
// Check whether the palette has a color (is valid)
if (size == 0)
{
Console.WriteLine("Sample.tif has no valid palette. Aborting.");
FreeImage.UnloadEx(ref dib);
return;
}
// Swapping the palette
for (int i = 0; i < size / 2; i++)
{
RGBQUAD temp = palette[i];
palette[i] = palette[size - 1 - i];
palette[size - 1 - i] = temp;
}
// Iterate over each scanline
for (int i = 0; i < FreeImage.GetHeight(dib); i++)
{
// Get scanline
Scanline<FI4BIT> scanline = new Scanline<FI4BIT>(dib, i);
// Iterate over all pixels swapping the palette index
// so that the color will stay the same
for (int j = 0; j < scanline.Length; j++)
{
scanline[j] = (byte)(size - 1 - scanline[j]);
}
}
// Save the bitmap to disk
if (!FreeImage.SaveEx(ref dib, "SampleOut03.tif", FREE_IMAGE_SAVE_FLAGS.TIFF_LZW, true))
{
Console.WriteLine("Error while saving 'SampleOut03.tif'");
FreeImage.UnloadEx(ref dib);
}
}
}
}

View File

@@ -0,0 +1,16 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
[assembly: AssemblyTitle("")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: ComVisible(false)]
[assembly: Guid("fd43331d-5ea4-40f8-86d5-8f820d606912")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,98 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.50727</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{A501F134-8FB6-460B-AFE9-884A696C1C07}</ProjectGuid>
<OutputType>Exe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Sample05</RootNamespace>
<AssemblyName>Sample05</AssemblyName>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<UseVSHostingProcess>false</UseVSHostingProcess>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>none</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<UseVSHostingProcess>false</UseVSHostingProcess>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>
</DebugType>
<PlatformTarget>x86</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>
</DebugType>
<PlatformTarget>x64</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<ItemGroup>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<Reference Include="FreeImageNET, Version=3.11.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\Bin\FreeImageNET.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Drawing" />
</ItemGroup>
<ItemGroup>
<None Include="Sample.jpg">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="Sample.tif">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

View File

@@ -0,0 +1,120 @@
namespace Sample06
{
partial class MainForm
{
/// <summary>
/// Erforderliche Designervariable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Verwendete Ressourcen bereinigen.
/// </summary>
/// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Vom Windows Form-Designer generierter Code
/// <summary>
/// Erforderliche Methode für die Designerunterstützung.
/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
/// </summary>
private void InitializeComponent()
{
this.picBox = new System.Windows.Forms.PictureBox();
this.bExample01 = new System.Windows.Forms.Button();
this.bOriginal = new System.Windows.Forms.Button();
this.bExample02 = new System.Windows.Forms.Button();
this.bExample03 = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.picBox)).BeginInit();
this.SuspendLayout();
//
// picBox
//
this.picBox.BackColor = System.Drawing.Color.White;
this.picBox.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.picBox.Location = new System.Drawing.Point(12, 12);
this.picBox.Name = "picBox";
this.picBox.Size = new System.Drawing.Size(747, 465);
this.picBox.TabIndex = 0;
this.picBox.TabStop = false;
//
// bExample01
//
this.bExample01.Location = new System.Drawing.Point(93, 483);
this.bExample01.Name = "bExample01";
this.bExample01.Size = new System.Drawing.Size(88, 23);
this.bExample01.TabIndex = 1;
this.bExample01.Text = "Example 01";
this.bExample01.UseVisualStyleBackColor = true;
this.bExample01.Click += new System.EventHandler(this.bExample01_Click);
//
// bOriginal
//
this.bOriginal.Location = new System.Drawing.Point(12, 483);
this.bOriginal.Name = "bOriginal";
this.bOriginal.Size = new System.Drawing.Size(75, 23);
this.bOriginal.TabIndex = 2;
this.bOriginal.Text = "Original";
this.bOriginal.UseVisualStyleBackColor = true;
this.bOriginal.Click += new System.EventHandler(this.bOriginal_Click);
//
// bExample02
//
this.bExample02.Location = new System.Drawing.Point(187, 483);
this.bExample02.Name = "bExample02";
this.bExample02.Size = new System.Drawing.Size(88, 23);
this.bExample02.TabIndex = 3;
this.bExample02.Text = "Example 02";
this.bExample02.UseVisualStyleBackColor = true;
this.bExample02.Click += new System.EventHandler(this.bExample02_Click);
//
// bExample03
//
this.bExample03.Location = new System.Drawing.Point(281, 483);
this.bExample03.Name = "bExample03";
this.bExample03.Size = new System.Drawing.Size(88, 23);
this.bExample03.TabIndex = 4;
this.bExample03.Text = "Example 03";
this.bExample03.UseVisualStyleBackColor = true;
this.bExample03.Click += new System.EventHandler(this.bExample03_Click);
//
// MainForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 16F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(771, 518);
this.Controls.Add(this.bExample03);
this.Controls.Add(this.bExample02);
this.Controls.Add(this.bOriginal);
this.Controls.Add(this.bExample01);
this.Controls.Add(this.picBox);
this.Font = new System.Drawing.Font("Tahoma", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "MainForm";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Sample06";
((System.ComponentModel.ISupportInitialize)(this.picBox)).EndInit();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.PictureBox picBox;
private System.Windows.Forms.Button bExample01;
private System.Windows.Forms.Button bOriginal;
private System.Windows.Forms.Button bExample02;
private System.Windows.Forms.Button bExample03;
}
}

View File

@@ -0,0 +1,177 @@
using System;
using System.Drawing;
using System.Windows.Forms;
using FreeImageAPI;
using System.Drawing.Imaging;
namespace Sample06
{
public partial class MainForm : Form
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
public MainForm()
{
InitializeComponent();
}
private void bExample01_Click(object sender, EventArgs e)
{
// Load bitmap
FIBITMAP dib = FreeImage.LoadEx("Sample.jpg");
// Check success
if (dib.IsNull)
{
MessageBox.Show("Could not load Sample.jpg", "Error");
return;
}
// Check whether bitmap is 24-bit
if (FreeImage.GetBPP(dib) != 24)
{
MessageBox.Show("Sample.jpg is not 24-bit.", "Error");
FreeImage.UnloadEx(ref dib);
return;
}
// Convert the 24-bit bitmap to 8-bit and forcing the result will be greyscale
dib = FreeImage.ConvertColorDepth(dib, FREE_IMAGE_COLOR_DEPTH.FICD_08_BPP | FREE_IMAGE_COLOR_DEPTH.FICD_FORCE_GREYSCALE, true);
if (FreeImage.GetBPP(dib) == 8)
{
// Convert the FreeImage-Bitmap into a .NET bitmap
Bitmap bitmap = FreeImage.GetBitmap(dib);
// Dispose the bitmap of the pictureBox
if (picBox.Image != null)
{
picBox.Image.Dispose();
}
// Assign the bitmap to the picturebox
picBox.Image = bitmap;
}
// Unload source bitmap
FreeImage.UnloadEx(ref dib);
}
private void bOriginal_Click(object sender, EventArgs e)
{
// Load bitmap
FIBITMAP dib = FreeImage.LoadEx("Sample.jpg");
// Check success
if (dib.IsNull)
{
MessageBox.Show("Could not load Sample.jpg", "Error");
return;
}
// Convert the FreeImage-Bitmap into a .NET bitmap
Bitmap bitmap = FreeImage.GetBitmap(dib);
// Check success
if (bitmap != null)
{
// Dispose old bitmap
if (picBox.Image != null)
{
picBox.Image.Dispose();
}
// Assign new bitmap
picBox.Image = bitmap;
}
// Unload bitmap
FreeImage.UnloadEx(ref dib);
}
private void bExample02_Click(object sender, EventArgs e)
{
FIBITMAP dib = FreeImage.LoadEx("Sample.jpg");
// Check success
if (dib.IsNull)
{
MessageBox.Show("Could not load Sample.jpg", "Error");
return;
}
// Convert bitmap to 8 bit
dib = FreeImage.ConvertColorDepth(dib, FREE_IMAGE_COLOR_DEPTH.FICD_08_BPP, true);
// Check whether conversion succeeded
if (FreeImage.GetBPP(dib) != 8)
{
MessageBox.Show("Converting Sample.jpg to 8-bit failed.", "Error");
FreeImage.UnloadEx(ref dib);
return;
}
// Convert the FreeImage-Bitmap into a .NET bitmap
Bitmap bitmap = FreeImage.GetBitmap(dib);
// Dispose old bitmap
if (picBox.Image != null)
{
picBox.Image.Dispose();
}
// Assign new bitmap
picBox.Image = bitmap;
// Unload bitmap
FreeImage.UnloadEx(ref dib);
}
private void bExample03_Click(object sender, EventArgs e)
{
// Load bitmap
Bitmap bitmap = (Bitmap)Bitmap.FromFile("Sample.jpg");
// Convert the .NET bitmap into a FreeImage-Bitmap
FIBITMAP dib = FreeImage.CreateFromBitmap(bitmap);
// Unload bitmap
bitmap.Dispose();
// Rescale the bitmap
FIBITMAP temp = FreeImage.Rescale(dib, 300, 300, FREE_IMAGE_FILTER.FILTER_BICUBIC);
// Unload bitmap
FreeImage.UnloadEx(ref dib);
Random rand = new Random();
// Rotate the bitmap
dib = FreeImage.Rotate(temp, rand.NextDouble() * 360d);
// Unload bitmap
FreeImage.UnloadEx(ref temp);
// Convert the FreeImage-Bitmap into a .NET bitmap
bitmap = FreeImage.GetBitmap(dib);
// Unload bitmap
FreeImage.UnloadEx(ref dib);
// Unload bitmap
if (picBox.Image != null)
{
picBox.Image.Dispose();
}
// Assign new bitmap
picBox.Image = bitmap;
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,16 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
[assembly: AssemblyTitle("")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: ComVisible(false)]
[assembly: Guid("69a8cbdd-43da-49e3-8d0b-2680c4ca2851")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,107 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.50727</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{E2EA945D-E22C-47B3-9DD9-3A0B07FA3F81}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Sample06</RootNamespace>
<AssemblyName>Sample06</AssemblyName>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<UseVSHostingProcess>false</UseVSHostingProcess>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>none</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<UseVSHostingProcess>false</UseVSHostingProcess>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>
</DebugType>
<PlatformTarget>x86</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>
</DebugType>
<PlatformTarget>x64</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<ItemGroup>
<Reference Include="FreeImageNET, Version=3.11.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\Bin\FreeImageNET.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
</ItemGroup>
<ItemGroup>
<Compile Include="MainForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="MainForm.Designer.cs">
<DependentUpon>MainForm.cs</DependentUpon>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="MainForm.resx">
<SubType>Designer</SubType>
<DependentUpon>MainForm.cs</DependentUpon>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<None Include="Sample.jpg">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 KiB

View File

@@ -0,0 +1,73 @@
using System;
using System.Collections.Generic;
using FreeImageAPI;
namespace Sample07
{
class Program
{
static void Main(string[] args)
{
// Check if FreeImage.dll is available (can be in %path%).
if (!FreeImage.IsAvailable())
{
Console.WriteLine("FreeImage.dll seems to be missing. Aborting.");
return;
}
Sample sample = new Sample();
// This example shows how to work with ICC-Profiles.
sample.Example();
}
}
public class Sample
{
public void Example()
{
// Load the sample bitmap.
FIBITMAP dib = FreeImage.LoadEx("Sample.jpg");
// Check success
if (dib.IsNull)
{
Console.WriteLine("Sample.jpg could not be loaded. Aborting.");
return;
}
// Get the bitmaps ICC-Profile.
FIICCPROFILE icc = FreeImage.GetICCProfileEx(dib);
// Print the profiles address.
Console.WriteLine("The profiles memory-address is : 0x{0}", icc.DataPointer.ToString("X"));
// Print the profiles size
Console.WriteLine("The profiles size is : {0} bytes", icc.Size);
// Create data for a new profile.
byte[] data = new byte[256];
for (int i = 0; i < data.Length; i++)
data[i] = (byte)i;
// Create the new profile
icc = new FIICCPROFILE(dib, data);
Console.WriteLine("The profiles memory-address is : 0x{0}", icc.DataPointer.ToString("X"));
Console.WriteLine("The profiles size is : {0} bytes", icc.Size);
// Create the new profile but only use the first 64 bytes
icc = new FIICCPROFILE(dib, data, 64);
Console.WriteLine("The profiles memory-address is : 0x{0}", icc.DataPointer.ToString("X"));
Console.WriteLine("The profiles size is : {0} bytes", icc.Size);
// CreateICCProfileEx(...) does the same as above
icc = FreeImage.CreateICCProfileEx(dib, data, 16);
Console.WriteLine("The profiles memory-address is : 0x{0}", icc.DataPointer.ToString("X"));
Console.WriteLine("The profiles size is : {0} bytes", icc.Size);
FreeImage.UnloadEx(ref dib);
}
}
}

View File

@@ -0,0 +1,16 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
[assembly: AssemblyTitle("")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: ComVisible(false)]
[assembly: Guid("c9991d1d-684a-4736-b088-369a216b35b6")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,94 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.50727</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{3B1BB976-64A7-41FD-B7E2-59104161AF7E}</ProjectGuid>
<OutputType>Exe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Sample07</RootNamespace>
<AssemblyName>Sample07</AssemblyName>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<UseVSHostingProcess>false</UseVSHostingProcess>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>none</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<UseVSHostingProcess>false</UseVSHostingProcess>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>
</DebugType>
<PlatformTarget>x86</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>
</DebugType>
<PlatformTarget>x64</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<ItemGroup>
<Reference Include="FreeImageNET, Version=3.11.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\Bin\FreeImageNET.dll</HintPath>
</Reference>
<Reference Include="System" />
</ItemGroup>
<ItemGroup>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<None Include="Sample.jpg">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

View File

@@ -0,0 +1,16 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
[assembly: AssemblyTitle("")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: ComVisible(false)]
[assembly: Guid("dc891ffc-ab5c-451f-97da-2c0d5d90edcc")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,108 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.50727</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{491042DB-495B-420C-A3BE-5D13019707C5}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Sample08</RootNamespace>
<AssemblyName>Sample08</AssemblyName>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<UseVSHostingProcess>false</UseVSHostingProcess>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>none</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<UseVSHostingProcess>false</UseVSHostingProcess>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>
</DebugType>
<PlatformTarget>x86</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>
</DebugType>
<PlatformTarget>x64</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<ItemGroup>
<Reference Include="FreeImageNET, Version=3.11.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\Bin\FreeImageNET.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="SampleForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="SampleForm.Designer.cs">
<DependentUpon>SampleForm.cs</DependentUpon>
</Compile>
<Compile Include="SerializationPlugin.cs" />
</ItemGroup>
<ItemGroup>
<None Include="Sample.jpg">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="SampleForm.resx">
<DependentUpon>SampleForm.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 KiB

View File

@@ -0,0 +1,119 @@
namespace Sample08
{
partial class SampleForm
{
/// <summary>
/// Erforderliche Designervariable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Verwendete Ressourcen bereinigen.
/// </summary>
/// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Vom Windows Form-Designer generierter Code
/// <summary>
/// Erforderliche Methode für die Designerunterstützung.
/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
/// </summary>
private void InitializeComponent()
{
this.pictureBox = new System.Windows.Forms.PictureBox();
this.bLoad = new System.Windows.Forms.Button();
this.SaveToSer = new System.Windows.Forms.Button();
this.LoadSerBitmap = new System.Windows.Forms.Button();
this.bClearBitmap = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.pictureBox)).BeginInit();
this.SuspendLayout();
//
// pictureBox
//
this.pictureBox.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.pictureBox.Location = new System.Drawing.Point(12, 12);
this.pictureBox.Name = "pictureBox";
this.pictureBox.Size = new System.Drawing.Size(600, 400);
this.pictureBox.TabIndex = 0;
this.pictureBox.TabStop = false;
//
// bLoad
//
this.bLoad.Location = new System.Drawing.Point(12, 418);
this.bLoad.Name = "bLoad";
this.bLoad.Size = new System.Drawing.Size(98, 23);
this.bLoad.TabIndex = 1;
this.bLoad.Text = "Load any bitmap";
this.bLoad.UseVisualStyleBackColor = true;
this.bLoad.Click += new System.EventHandler(this.bLoad_Click);
//
// SaveToSer
//
this.SaveToSer.Location = new System.Drawing.Point(324, 418);
this.SaveToSer.Name = "SaveToSer";
this.SaveToSer.Size = new System.Drawing.Size(98, 23);
this.SaveToSer.TabIndex = 2;
this.SaveToSer.Text = "Save as .ser";
this.SaveToSer.UseVisualStyleBackColor = true;
this.SaveToSer.Click += new System.EventHandler(this.SaveToSer_Click);
//
// LoadSerBitmap
//
this.LoadSerBitmap.Location = new System.Drawing.Point(220, 418);
this.LoadSerBitmap.Name = "LoadSerBitmap";
this.LoadSerBitmap.Size = new System.Drawing.Size(98, 23);
this.LoadSerBitmap.TabIndex = 3;
this.LoadSerBitmap.Text = "Load .ser bitmap";
this.LoadSerBitmap.UseVisualStyleBackColor = true;
this.LoadSerBitmap.Click += new System.EventHandler(this.LoadSerBitmap_Click);
//
// bClearBitmap
//
this.bClearBitmap.Location = new System.Drawing.Point(116, 418);
this.bClearBitmap.Name = "bClearBitmap";
this.bClearBitmap.Size = new System.Drawing.Size(98, 23);
this.bClearBitmap.TabIndex = 4;
this.bClearBitmap.Text = "Clear screen";
this.bClearBitmap.UseVisualStyleBackColor = true;
this.bClearBitmap.Click += new System.EventHandler(this.bClearBitmap_Click);
//
// SampleForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(627, 448);
this.Controls.Add(this.bClearBitmap);
this.Controls.Add(this.LoadSerBitmap);
this.Controls.Add(this.SaveToSer);
this.Controls.Add(this.bLoad);
this.Controls.Add(this.pictureBox);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "SampleForm";
this.ShowIcon = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Sample 08";
((System.ComponentModel.ISupportInitialize)(this.pictureBox)).EndInit();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.PictureBox pictureBox;
private System.Windows.Forms.Button bLoad;
private System.Windows.Forms.Button SaveToSer;
private System.Windows.Forms.Button LoadSerBitmap;
private System.Windows.Forms.Button bClearBitmap;
}
}

View File

@@ -0,0 +1,217 @@
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;
}
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,222 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
using System.IO.Compression;
using FreeImageAPI;
using FreeImageAPI.IO;
using FreeImageAPI.Plugins;
namespace Sample08
{
public sealed class SerializationPlugin : LocalPlugin
{
// Header for the file
private byte[] header = new byte[] { 0xff, 0x12, 0x0f, 0xff, 0x01, 0x00 };
// Structure that will store all bitmap data.
[Serializable]
private struct SerialDib
{
public uint width;
public uint height;
public int pitch;
public uint bpp;
public uint red_mask;
public uint green_mask;
public uint blue_mask;
public byte[] data;
}
// Implementation of 'GetImplementedMethods()'
// All implemented methods are listed.
protected override LocalPlugin.MethodFlags GetImplementedMethods()
{
return
MethodFlags.DescriptionProc |
MethodFlags.SupportsExportBPPProc |
MethodFlags.SupportsExportTypeProc |
MethodFlags.SupportsICCProfilesProc |
MethodFlags.LoadProc |
MethodFlags.SaveProc |
MethodFlags.ValidateProc |
MethodFlags.ExtensionListProc;
}
// Returns a format string.
protected override string FormatProc()
{
return "Serialization";
}
// Returns a more specific description
protected override string DescriptionProc()
{
return "Serializes bitmaps for .NET";
}
// Returns whether a color depth is supported.
protected override bool SupportsExportBPPProc(int bpp)
{
return ((bpp == 1) ||
(bpp == 4) ||
(bpp == 8) ||
(bpp == 16) ||
(bpp == 24) ||
(bpp == 32));
}
// This plugin can only export standard bitmaps
protected override bool SupportsExportTypeProc(FREE_IMAGE_TYPE type)
{
return (type == FREE_IMAGE_TYPE.FIT_BITMAP);
}
// This plugin does not support icc profiles
protected override bool SupportsICCProfilesProc()
{
return false;
}
// The function reads the first bytes of the file and compares it
// with the predefined header.
protected override bool ValidateProc(ref FreeImageIO io, fi_handle handle)
{
for (int i = 0; i < header.Length; i++)
if (ReadByte(io, handle) != header[i])
return false;
return true;
}
// Loading function
protected override FIBITMAP LoadProc(ref FreeImageIO io, fi_handle handle, int page, int flags, IntPtr data)
{
// Check if the data has the correct format
if (!ValidateProc(ref io, handle))
{
// Create a free-image message
FreeImage.OutputMessageProc(format, "Invalid format.");
// return 0 (operation failed)
return FIBITMAP.Zero;
}
SerialDib sdib;
int read = 0;
System.IO.MemoryStream stream = new System.IO.MemoryStream();
byte[] buffer = new byte[1024];
do
{
// Use the helper function 'Read' to read from the source
read = Read(io, handle, 1, 1024, ref buffer);
// Store the data in a temporary buffer
stream.Write(buffer, 0, read);
}
while (read != 0);
// Set the memory stream back to the beginning.
stream.Position = 0;
// Unzip the stream
GZipStream zipStream = new GZipStream(stream, CompressionMode.Decompress);
// Create a serializer
BinaryFormatter formatter = new BinaryFormatter();
// Deserialize the stream
sdib = (SerialDib)formatter.Deserialize(zipStream);
// Unload the stream
zipStream.Dispose();
// Use 'ConvertFromRawBits and the deserialized struct to recreate the bitmap
// In this case the marshaller is used to create the needed IntPtr to the data
// array.
FIBITMAP dib = FreeImage.ConvertFromRawBits(
Marshal.UnsafeAddrOfPinnedArrayElement(sdib.data, 0),
(int)sdib.width, (int)sdib.height, sdib.pitch, sdib.bpp,
sdib.red_mask, sdib.green_mask, sdib.blue_mask,
false);
// Unload the temporary stream
stream.Dispose();
// Return the created bitmap
return dib;
}
// Saving function
protected override bool SaveProc(ref FreeImageIO io, FIBITMAP dib, fi_handle handle, int page, int flags, IntPtr data)
{
SerialDib sdib;
uint size = FreeImage.GetDIBSize(dib);
// Store all data needed to recreate the bitmap
sdib.width = FreeImage.GetWidth(dib);
sdib.height = FreeImage.GetHeight(dib);
sdib.pitch = (int)FreeImage.GetPitch(dib);
sdib.bpp = FreeImage.GetBPP(dib);
sdib.red_mask = FreeImage.GetRedMask(dib);
sdib.green_mask = FreeImage.GetGreenMask(dib);
sdib.blue_mask = FreeImage.GetBlueMask(dib);
sdib.data = new byte[size];
// Copy the bitmaps data into the structures byte-array
// The marshaller is used to create an IntPtr for using
// 'ConvertToRawBits'.
FreeImage.ConvertToRawBits(Marshal.UnsafeAddrOfPinnedArrayElement(sdib.data, 0),
dib, sdib.pitch, sdib.bpp,
sdib.red_mask, sdib.green_mask, sdib.blue_mask,
false);
// Use the healper function to write the header to the destination
if (Write(io, handle, (uint)header.Length, 1, ref header) != 1)
return false;
// Create a serializer
BinaryFormatter formatter = new BinaryFormatter();
// Create a temporary stream
MemoryStream stream = new MemoryStream();
// Create a compression stream
GZipStream zipStream = new GZipStream(stream, CompressionMode.Compress);
// Serialize the structure into the compression stream
formatter.Serialize(zipStream, sdib);
// Unload the compression stream
zipStream.Dispose();
// Get the result data
byte[] buffer = stream.GetBuffer();
// Use the healper function 'Write' to write the data to the destination
if (Write(io, handle, 1, (uint)buffer.Length, ref buffer) != buffer.Length)
{
// Unload the temporary stream
stream.Dispose();
return false;
}
// Unload the temporary stream
stream.Dispose();
return true;
}
// Return a list of supported file extensions (comma seperated)
protected override string ExtensionListProc()
{
return "ser";
}
// Implementation of 'ToString()'
public override string ToString()
{
return DescriptionProc();
}
}
}

View File

@@ -0,0 +1,16 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
[assembly: AssemblyTitle("")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: ComVisible(false)]
[assembly: Guid("7f29fbaa-d2b3-4011-b34f-5a109bc282af")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,103 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.50727</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{92A454B2-67EF-4B70-99C9-F22B83B6FBFF}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Sample09</RootNamespace>
<AssemblyName>Sample09</AssemblyName>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<UseVSHostingProcess>false</UseVSHostingProcess>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>none</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<UseVSHostingProcess>false</UseVSHostingProcess>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>
</DebugType>
<PlatformTarget>x86</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>
</DebugType>
<PlatformTarget>x64</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<ItemGroup>
<Reference Include="FreeImageNET, Version=3.11.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\Bin\FreeImageNET.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="SampleForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="SampleForm.Designer.cs">
<DependentUpon>SampleForm.cs</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="SampleForm.resx">
<SubType>Designer</SubType>
<DependentUpon>SampleForm.cs</DependentUpon>
</EmbeddedResource>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -0,0 +1,115 @@
namespace Sample09
{
partial class SampleForm
{
/// <summary>
/// Erforderliche Designervariable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Verwendete Ressourcen bereinigen.
/// </summary>
/// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Vom Windows Form-Designer generierter Code
/// <summary>
/// Erforderliche Methode für die Designerunterstützung.
/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
/// </summary>
private void InitializeComponent()
{
this.picBox = new System.Windows.Forms.PictureBox();
this.tbURL = new System.Windows.Forms.TextBox();
this.lUrl = new System.Windows.Forms.Label();
this.bLoadUrl = new System.Windows.Forms.Button();
this.bSave = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.picBox)).BeginInit();
this.SuspendLayout();
//
// picBox
//
this.picBox.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.picBox.Location = new System.Drawing.Point(12, 12);
this.picBox.Name = "picBox";
this.picBox.Size = new System.Drawing.Size(536, 299);
this.picBox.TabIndex = 0;
this.picBox.TabStop = false;
//
// tbURL
//
this.tbURL.Location = new System.Drawing.Point(155, 317);
this.tbURL.Name = "tbURL";
this.tbURL.Size = new System.Drawing.Size(393, 20);
this.tbURL.TabIndex = 1;
this.tbURL.Text = "http://freeimage.sourceforge.net/images/logo.jpg";
//
// lUrl
//
this.lUrl.AutoSize = true;
this.lUrl.Location = new System.Drawing.Point(9, 320);
this.lUrl.Name = "lUrl";
this.lUrl.Size = new System.Drawing.Size(137, 13);
this.lUrl.TabIndex = 2;
this.lUrl.Text = "Enter the URL of an Image:";
//
// bLoadUrl
//
this.bLoadUrl.Location = new System.Drawing.Point(12, 344);
this.bLoadUrl.Name = "bLoadUrl";
this.bLoadUrl.Size = new System.Drawing.Size(75, 23);
this.bLoadUrl.TabIndex = 3;
this.bLoadUrl.Text = "Load URL";
this.bLoadUrl.UseVisualStyleBackColor = true;
this.bLoadUrl.Click += new System.EventHandler(this.bLoadUrl_Click);
//
// bSave
//
this.bSave.Location = new System.Drawing.Point(93, 344);
this.bSave.Name = "bSave";
this.bSave.Size = new System.Drawing.Size(75, 23);
this.bSave.TabIndex = 4;
this.bSave.Text = "Save to disk";
this.bSave.UseVisualStyleBackColor = true;
this.bSave.Click += new System.EventHandler(this.bSave_Click);
//
// SampleForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(560, 379);
this.Controls.Add(this.bSave);
this.Controls.Add(this.bLoadUrl);
this.Controls.Add(this.lUrl);
this.Controls.Add(this.tbURL);
this.Controls.Add(this.picBox);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "SampleForm";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Sample09";
((System.ComponentModel.ISupportInitialize)(this.picBox)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.PictureBox picBox;
private System.Windows.Forms.TextBox tbURL;
private System.Windows.Forms.Label lUrl;
private System.Windows.Forms.Button bLoadUrl;
private System.Windows.Forms.Button bSave;
}
}

View File

@@ -0,0 +1,147 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using FreeImageAPI;
using System.Net;
using System.IO;
namespace Sample09
{
public partial class SampleForm : Form
{
[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();
}
private void bLoadUrl_Click(object sender, EventArgs e)
{
// Verify url
if (String.IsNullOrEmpty(tbURL.Text))
{
MessageBox.Show("Please enter a valid URL.", "Error");
return;
}
FIBITMAP dib = new FIBITMAP();
Stream sourceStream = null;
try
{
// Build a stream to read from
WebRequest request = (WebRequest)HttpWebRequest.Create(tbURL.Text);
WebResponse response = request.GetResponse();
sourceStream = response.GetResponseStream();
if (sourceStream == null)
{
throw new Exception();
}
// Load the image from stream
dib = FreeImage.LoadFromStream(sourceStream);
// Check success
if (dib.IsNull)
{
throw new Exception();
}
// Convert the bitmap into a .NET bitmap
Bitmap bitmap = FreeImage.GetBitmap(dib);
if (bitmap == null)
{
throw new Exception();
}
// Show the bitmap
if (picBox.Image != null)
{
picBox.Image.Dispose();
}
picBox.Image = bitmap;
}
catch
{
// Error handling
MessageBox.Show("Error loading URL.", "Error");
}
finally
{
// Clean up memory
FreeImage.UnloadEx(ref dib);
if (sourceStream != null) sourceStream.Dispose();
}
}
private void bSave_Click(object sender, EventArgs e)
{
// Check if there is a loaded bitmap
if (picBox.Image == null)
{
MessageBox.Show("No image loaded.", "Error");
return;
}
SaveFileDialog sfd = null;
FileStream fStream = null;
FIBITMAP dib = new FIBITMAP();
try
{
sfd = new SaveFileDialog();
sfd.CreatePrompt = false;
sfd.FileName = "";
sfd.Filter = "TIF (*tif)|*.tif";
sfd.OverwritePrompt = true;
sfd.RestoreDirectory = true;
if (sfd.ShowDialog() == DialogResult.OK)
{
// Convert the .NET bitmap into a FreeImage-Bitmap
dib = FreeImage.CreateFromBitmap((Bitmap)picBox.Image);
if (dib.IsNull)
{
throw new Exception();
}
// Create a filestream to write to
fStream = new FileStream(sfd.FileName, FileMode.Create);
if (!FreeImage.SaveToStream(
ref dib,
fStream,
FREE_IMAGE_FORMAT.FIF_TIFF,
FREE_IMAGE_SAVE_FLAGS.TIFF_LZW,
FREE_IMAGE_COLOR_DEPTH.FICD_AUTO,
false))
{
throw new Exception();
}
MessageBox.Show("Image saved successfully.", "Success");
}
else
{
MessageBox.Show("Operation aborted.", "Aborted");
}
}
catch
{
MessageBox.Show("Error saving image.", "Error");
}
finally
{
// Clean up
if (sfd != null) sfd.Dispose();
if (fStream != null) fStream.Dispose();
FreeImage.UnloadEx(ref dib);
}
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,87 @@
namespace Sample10
{
partial class MainForm
{
/// <summary>
/// Erforderliche Designervariable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Verwendete Ressourcen bereinigen.
/// </summary>
/// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Vom Windows Form-Designer generierter Code
/// <summary>
/// Erforderliche Methode für die Designerunterstützung.
/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
/// </summary>
private void InitializeComponent()
{
this.bLoad = new System.Windows.Forms.Button();
this.bQuit = new System.Windows.Forms.Button();
this.tvMetadata = new System.Windows.Forms.TreeView();
this.SuspendLayout();
//
// bLoad
//
this.bLoad.Location = new System.Drawing.Point(12, 336);
this.bLoad.Name = "bLoad";
this.bLoad.Size = new System.Drawing.Size(75, 23);
this.bLoad.TabIndex = 0;
this.bLoad.Text = "Load Image";
this.bLoad.UseVisualStyleBackColor = true;
this.bLoad.Click += new System.EventHandler(this.bLoad_Click);
//
// bQuit
//
this.bQuit.Location = new System.Drawing.Point(328, 336);
this.bQuit.Name = "bQuit";
this.bQuit.Size = new System.Drawing.Size(75, 23);
this.bQuit.TabIndex = 1;
this.bQuit.Text = "Quit";
this.bQuit.UseVisualStyleBackColor = true;
this.bQuit.Click += new System.EventHandler(this.bQuit_Click);
//
// tvMetadata
//
this.tvMetadata.Location = new System.Drawing.Point(12, 12);
this.tvMetadata.Name = "tvMetadata";
this.tvMetadata.Size = new System.Drawing.Size(389, 318);
this.tvMetadata.TabIndex = 2;
//
// MainForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(415, 371);
this.Controls.Add(this.tvMetadata);
this.Controls.Add(this.bQuit);
this.Controls.Add(this.bLoad);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "MainForm";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "MainForm";
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Button bLoad;
private System.Windows.Forms.Button bQuit;
private System.Windows.Forms.TreeView tvMetadata;
}
}

View File

@@ -0,0 +1,105 @@
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);
}
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,16 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
[assembly: AssemblyTitle("")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: ComVisible(false)]
[assembly: Guid("e8da4fa8-cc15-4b0e-8c57-d55ceb771559")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,101 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.50727</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{55DCC37A-E56C-44D9-9C44-8DAB10CD3003}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Sample10</RootNamespace>
<AssemblyName>Sample10</AssemblyName>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<UseVSHostingProcess>false</UseVSHostingProcess>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>none</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>
</DebugType>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>
</DebugType>
<PlatformTarget>x64</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<ItemGroup>
<Reference Include="FreeImageNET, Version=3.11.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\Bin\FreeImageNET.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="MainForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="MainForm.Designer.cs">
<DependentUpon>MainForm.cs</DependentUpon>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="MainForm.resx">
<SubType>Designer</SubType>
<DependentUpon>MainForm.cs</DependentUpon>
</EmbeddedResource>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -0,0 +1,382 @@
namespace Sample11
{
partial class MainForm
{
/// <summary>
/// Erforderliche Designervariable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Verwendete Ressourcen bereinigen.
/// </summary>
/// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Vom Windows Form-Designer generierter Code
/// <summary>
/// Erforderliche Methode für die Designerunterstützung.
/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
/// </summary>
private void InitializeComponent()
{
this.pictureBox = new System.Windows.Forms.PictureBox();
this.bLoadImage = new System.Windows.Forms.Button();
this.bSaveImage = new System.Windows.Forms.Button();
this.ofd = new System.Windows.Forms.OpenFileDialog();
this.sfd = new System.Windows.Forms.SaveFileDialog();
this.lWidth = new System.Windows.Forms.Label();
this.lHeight = new System.Windows.Forms.Label();
this.lBpp = new System.Windows.Forms.Label();
this.lMetadataCount = new System.Windows.Forms.Label();
this.bGreyscale = new System.Windows.Forms.Button();
this.cbSelectFrame = new System.Windows.Forms.ComboBox();
this.lComment = new System.Windows.Forms.Label();
this.bAdjustGamma = new System.Windows.Forms.Button();
this.vGamma = new System.Windows.Forms.NumericUpDown();
this.bRedChannelOnly = new System.Windows.Forms.Button();
this.bBlueChannel = new System.Windows.Forms.Button();
this.bGreenChannel = new System.Windows.Forms.Button();
this.bAllChannels = new System.Windows.Forms.Button();
this.lSelectFrame = new System.Windows.Forms.Label();
this.lImageFormat = new System.Windows.Forms.Label();
this.bRotate = new System.Windows.Forms.Button();
this.vRotate = new System.Windows.Forms.TrackBar();
this.lRotate = new System.Windows.Forms.Label();
this.lColors = new System.Windows.Forms.Label();
this.nShowMetadata = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.pictureBox)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.vGamma)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.vRotate)).BeginInit();
this.SuspendLayout();
//
// pictureBox
//
this.pictureBox.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.pictureBox.Location = new System.Drawing.Point(14, 15);
this.pictureBox.Margin = new System.Windows.Forms.Padding(4);
this.pictureBox.Name = "pictureBox";
this.pictureBox.Size = new System.Drawing.Size(542, 395);
this.pictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
this.pictureBox.TabIndex = 0;
this.pictureBox.TabStop = false;
//
// bLoadImage
//
this.bLoadImage.Location = new System.Drawing.Point(564, 15);
this.bLoadImage.Margin = new System.Windows.Forms.Padding(4);
this.bLoadImage.Name = "bLoadImage";
this.bLoadImage.Size = new System.Drawing.Size(125, 28);
this.bLoadImage.TabIndex = 1;
this.bLoadImage.Text = "Load image";
this.bLoadImage.UseVisualStyleBackColor = true;
this.bLoadImage.Click += new System.EventHandler(this.bLoadImage_Click);
//
// bSaveImage
//
this.bSaveImage.Location = new System.Drawing.Point(564, 51);
this.bSaveImage.Margin = new System.Windows.Forms.Padding(4);
this.bSaveImage.Name = "bSaveImage";
this.bSaveImage.Size = new System.Drawing.Size(125, 28);
this.bSaveImage.TabIndex = 2;
this.bSaveImage.Text = "Save image";
this.bSaveImage.UseVisualStyleBackColor = true;
this.bSaveImage.Click += new System.EventHandler(this.bSaveImage_Click);
//
// ofd
//
this.ofd.AddExtension = false;
this.ofd.AutoUpgradeEnabled = false;
this.ofd.Filter = "All files|*.*";
this.ofd.RestoreDirectory = true;
this.ofd.SupportMultiDottedExtensions = true;
//
// sfd
//
this.sfd.AddExtension = false;
this.sfd.Filter = "All files|*.*";
this.sfd.RestoreDirectory = true;
this.sfd.SupportMultiDottedExtensions = true;
//
// lWidth
//
this.lWidth.AutoSize = true;
this.lWidth.Location = new System.Drawing.Point(563, 350);
this.lWidth.Name = "lWidth";
this.lWidth.Size = new System.Drawing.Size(57, 16);
this.lWidth.TabIndex = 6;
this.lWidth.Text = "Width: 0";
//
// lHeight
//
this.lHeight.AutoSize = true;
this.lHeight.Location = new System.Drawing.Point(649, 350);
this.lHeight.Name = "lHeight";
this.lHeight.Size = new System.Drawing.Size(60, 16);
this.lHeight.TabIndex = 7;
this.lHeight.Text = "Height: 0";
//
// lBpp
//
this.lBpp.AutoSize = true;
this.lBpp.Location = new System.Drawing.Point(740, 350);
this.lBpp.Name = "lBpp";
this.lBpp.Size = new System.Drawing.Size(45, 16);
this.lBpp.TabIndex = 8;
this.lBpp.Text = "Bpp: 0";
//
// lMetadataCount
//
this.lMetadataCount.AutoSize = true;
this.lMetadataCount.Location = new System.Drawing.Point(809, 350);
this.lMetadataCount.Name = "lMetadataCount";
this.lMetadataCount.Size = new System.Drawing.Size(77, 16);
this.lMetadataCount.TabIndex = 9;
this.lMetadataCount.Text = "Metadata: 0";
//
// bGreyscale
//
this.bGreyscale.Location = new System.Drawing.Point(564, 121);
this.bGreyscale.Name = "bGreyscale";
this.bGreyscale.Size = new System.Drawing.Size(125, 28);
this.bGreyscale.TabIndex = 10;
this.bGreyscale.Text = "Conv to greyscale";
this.bGreyscale.UseVisualStyleBackColor = true;
this.bGreyscale.Click += new System.EventHandler(this.bGreyscale_Click);
//
// cbSelectFrame
//
this.cbSelectFrame.FormattingEnabled = true;
this.cbSelectFrame.Location = new System.Drawing.Point(695, 156);
this.cbSelectFrame.Name = "cbSelectFrame";
this.cbSelectFrame.Size = new System.Drawing.Size(121, 24);
this.cbSelectFrame.TabIndex = 11;
this.cbSelectFrame.SelectedIndexChanged += new System.EventHandler(this.comboBox1_SelectedIndexChanged);
//
// lComment
//
this.lComment.AutoSize = true;
this.lComment.Location = new System.Drawing.Point(563, 373);
this.lComment.Name = "lComment";
this.lComment.Size = new System.Drawing.Size(107, 16);
this.lComment.TabIndex = 12;
this.lComment.Text = "Image-comment:";
//
// bAdjustGamma
//
this.bAdjustGamma.Location = new System.Drawing.Point(564, 185);
this.bAdjustGamma.Name = "bAdjustGamma";
this.bAdjustGamma.Size = new System.Drawing.Size(125, 28);
this.bAdjustGamma.TabIndex = 13;
this.bAdjustGamma.Text = "Adjust gamma";
this.bAdjustGamma.UseVisualStyleBackColor = true;
this.bAdjustGamma.Click += new System.EventHandler(this.bAdjustGamma_Click);
//
// vGamma
//
this.vGamma.DecimalPlaces = 2;
this.vGamma.Increment = new decimal(new int[] {
0,
0,
0,
0});
this.vGamma.Location = new System.Drawing.Point(695, 189);
this.vGamma.Maximum = new decimal(new int[] {
2,
0,
0,
0});
this.vGamma.Name = "vGamma";
this.vGamma.Size = new System.Drawing.Size(121, 23);
this.vGamma.TabIndex = 14;
//
// bRedChannelOnly
//
this.bRedChannelOnly.Location = new System.Drawing.Point(564, 219);
this.bRedChannelOnly.Name = "bRedChannelOnly";
this.bRedChannelOnly.Size = new System.Drawing.Size(125, 28);
this.bRedChannelOnly.TabIndex = 15;
this.bRedChannelOnly.Text = "Red channel";
this.bRedChannelOnly.UseVisualStyleBackColor = true;
this.bRedChannelOnly.Click += new System.EventHandler(this.bRedChannelOnly_Click);
//
// bBlueChannel
//
this.bBlueChannel.Location = new System.Drawing.Point(564, 287);
this.bBlueChannel.Name = "bBlueChannel";
this.bBlueChannel.Size = new System.Drawing.Size(125, 28);
this.bBlueChannel.TabIndex = 16;
this.bBlueChannel.Text = "Blue channel";
this.bBlueChannel.UseVisualStyleBackColor = true;
this.bBlueChannel.Click += new System.EventHandler(this.bBlueChannel_Click);
//
// bGreenChannel
//
this.bGreenChannel.Location = new System.Drawing.Point(564, 253);
this.bGreenChannel.Name = "bGreenChannel";
this.bGreenChannel.Size = new System.Drawing.Size(125, 28);
this.bGreenChannel.TabIndex = 17;
this.bGreenChannel.Text = "Green channel";
this.bGreenChannel.UseVisualStyleBackColor = true;
this.bGreenChannel.Click += new System.EventHandler(this.bGreenChannel_Click);
//
// bAllChannels
//
this.bAllChannels.Location = new System.Drawing.Point(563, 321);
this.bAllChannels.Name = "bAllChannels";
this.bAllChannels.Size = new System.Drawing.Size(126, 28);
this.bAllChannels.TabIndex = 18;
this.bAllChannels.Text = "All channels";
this.bAllChannels.UseVisualStyleBackColor = true;
this.bAllChannels.Click += new System.EventHandler(this.bAllChannels_Click);
//
// lSelectFrame
//
this.lSelectFrame.AutoSize = true;
this.lSelectFrame.Location = new System.Drawing.Point(563, 159);
this.lSelectFrame.Name = "lSelectFrame";
this.lSelectFrame.Size = new System.Drawing.Size(86, 16);
this.lSelectFrame.TabIndex = 19;
this.lSelectFrame.Text = "Select frame:";
//
// lImageFormat
//
this.lImageFormat.AutoSize = true;
this.lImageFormat.Location = new System.Drawing.Point(563, 395);
this.lImageFormat.Name = "lImageFormat";
this.lImageFormat.Size = new System.Drawing.Size(92, 16);
this.lImageFormat.TabIndex = 20;
this.lImageFormat.Text = "Image-format:";
//
// bRotate
//
this.bRotate.Location = new System.Drawing.Point(564, 86);
this.bRotate.Name = "bRotate";
this.bRotate.Size = new System.Drawing.Size(125, 28);
this.bRotate.TabIndex = 21;
this.bRotate.Text = "Rotate";
this.bRotate.UseVisualStyleBackColor = true;
this.bRotate.Click += new System.EventHandler(this.bRotate_Click);
//
// vRotate
//
this.vRotate.Location = new System.Drawing.Point(695, 80);
this.vRotate.Maximum = 360;
this.vRotate.Name = "vRotate";
this.vRotate.Size = new System.Drawing.Size(170, 45);
this.vRotate.TabIndex = 22;
this.vRotate.TickFrequency = 10;
this.vRotate.TickStyle = System.Windows.Forms.TickStyle.Both;
this.vRotate.Scroll += new System.EventHandler(this.vRotate_Scroll);
//
// lRotate
//
this.lRotate.AutoSize = true;
this.lRotate.Location = new System.Drawing.Point(871, 92);
this.lRotate.Name = "lRotate";
this.lRotate.Size = new System.Drawing.Size(15, 16);
this.lRotate.TabIndex = 23;
this.lRotate.Text = "0";
//
// lColors
//
this.lColors.AutoSize = true;
this.lColors.Location = new System.Drawing.Point(740, 394);
this.lColors.Name = "lColors";
this.lColors.Size = new System.Drawing.Size(60, 16);
this.lColors.TabIndex = 24;
this.lColors.Text = "Colors: 0";
//
// nShowMetadata
//
this.nShowMetadata.Location = new System.Drawing.Point(696, 15);
this.nShowMetadata.Name = "nShowMetadata";
this.nShowMetadata.Size = new System.Drawing.Size(125, 28);
this.nShowMetadata.TabIndex = 25;
this.nShowMetadata.Text = "Show metadata";
this.nShowMetadata.UseVisualStyleBackColor = true;
this.nShowMetadata.Click += new System.EventHandler(this.nShowMetadata_Click);
//
// MainForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 16F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(908, 423);
this.Controls.Add(this.nShowMetadata);
this.Controls.Add(this.lColors);
this.Controls.Add(this.lRotate);
this.Controls.Add(this.vRotate);
this.Controls.Add(this.bRotate);
this.Controls.Add(this.lImageFormat);
this.Controls.Add(this.lSelectFrame);
this.Controls.Add(this.bAllChannels);
this.Controls.Add(this.bGreenChannel);
this.Controls.Add(this.bBlueChannel);
this.Controls.Add(this.bRedChannelOnly);
this.Controls.Add(this.vGamma);
this.Controls.Add(this.bAdjustGamma);
this.Controls.Add(this.lComment);
this.Controls.Add(this.cbSelectFrame);
this.Controls.Add(this.bGreyscale);
this.Controls.Add(this.lMetadataCount);
this.Controls.Add(this.lBpp);
this.Controls.Add(this.lHeight);
this.Controls.Add(this.lWidth);
this.Controls.Add(this.bSaveImage);
this.Controls.Add(this.bLoadImage);
this.Controls.Add(this.pictureBox);
this.DoubleBuffered = true;
this.Font = new System.Drawing.Font("Tahoma", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.Margin = new System.Windows.Forms.Padding(4);
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "MainForm";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Sample 11";
((System.ComponentModel.ISupportInitialize)(this.pictureBox)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.vGamma)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.vRotate)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.PictureBox pictureBox;
private System.Windows.Forms.Button bLoadImage;
private System.Windows.Forms.Button bSaveImage;
private System.Windows.Forms.OpenFileDialog ofd;
private System.Windows.Forms.SaveFileDialog sfd;
private System.Windows.Forms.Label lWidth;
private System.Windows.Forms.Label lHeight;
private System.Windows.Forms.Label lBpp;
private System.Windows.Forms.Label lMetadataCount;
private System.Windows.Forms.Button bGreyscale;
private System.Windows.Forms.ComboBox cbSelectFrame;
private System.Windows.Forms.Label lComment;
private System.Windows.Forms.Button bAdjustGamma;
private System.Windows.Forms.NumericUpDown vGamma;
private System.Windows.Forms.Button bRedChannelOnly;
private System.Windows.Forms.Button bBlueChannel;
private System.Windows.Forms.Button bGreenChannel;
private System.Windows.Forms.Button bAllChannels;
private System.Windows.Forms.Label lSelectFrame;
private System.Windows.Forms.Label lImageFormat;
private System.Windows.Forms.Button bRotate;
private System.Windows.Forms.TrackBar vRotate;
private System.Windows.Forms.Label lRotate;
private System.Windows.Forms.Label lColors;
private System.Windows.Forms.Button nShowMetadata;
}
}

View File

@@ -0,0 +1,412 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using FreeImageAPI;
using FreeImageAPI.Metadata;
using FreeImageAPI.Plugins;
namespace Sample11
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
[STAThread]
static void Main()
{
// Capture messages generated by FreeImage
FreeImageEngine.Message += new OutputMessageFunction(FreeImageEngine_Message);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
static void FreeImageEngine_Message(FREE_IMAGE_FORMAT fif, string message)
{
// Display the message
// FreeImage continues code executing when all
// addes subscribers of 'Message' finished returned.
MessageBox.Show(message, "FreeImage-Message", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
// The FreeImageBitmap this sample will work with.
FreeImageBitmap bitmap = null;
// Replaces the current bitmap with the given one.
private void ReplaceBitmap(FreeImageBitmap newBitmap)
{
// Checks whether the bitmap is usable
if (newBitmap == null || newBitmap.IsDisposed)
{
MessageBox.Show(
"Unexpected error.",
"Error",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
// Check whether the image type of the new bitmap is 'FIT_BITMAP'.
// If not convert to 'FIT_BITMAP'.
if (newBitmap.ImageType != FREE_IMAGE_TYPE.FIT_BITMAP)
{
if (!newBitmap.ConvertType(FREE_IMAGE_TYPE.FIT_BITMAP, true))
{
MessageBox.Show(
"Error converting bitmap to standard type.",
"Error",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
return;
}
}
// Dispose the old bitmap only in case it exists and
// the old instance is another than the new one.
if ((bitmap != null) && !object.ReferenceEquals(bitmap, newBitmap))
{
bitmap.Dispose();
}
// Dispose the picturebox's bitmap in case it exists.
if (pictureBox.Image != null)
{
pictureBox.Image.Dispose();
}
// Set the new bitmap.
pictureBox.Image = (Bitmap)(bitmap = newBitmap);
// Update gui.
UpdateBitmapInformations();
UpdateFrameSelection();
}
// Get bitmap properties and display them in the gui.
private void UpdateBitmapInformations()
{
if (Bitmap)
{
// Get width
lWidth.Text = String.Format("Width: {0}", bitmap.Width);
// Get Height
lHeight.Text = String.Format("Height: {0}", bitmap.Height);
// Get color depth
lBpp.Text = String.Format("Bpp: {0}", bitmap.ColorDepth);
// Get number of metadata
ImageMetadata mData = bitmap.Metadata;
mData.HideEmptyModels = true;
int mCnt = 0;
foreach (MetadataModel model in mData.List)
{
mCnt += model.Count;
}
lMetadataCount.Text = String.Format("Metadata: {0}", mCnt);
// Get image comment
lComment.Text = String.Format("Image-comment: {0}", bitmap.Comment != null ? bitmap.Comment : String.Empty);
// Get the number of real colors in the image
lColors.Text = String.Format("Colors: {0}", bitmap.UniqueColors);
}
else
{
// Reset all values
lWidth.Text = String.Format("Width: {0}", 0);
lHeight.Text = String.Format("Height: {0}", 0);
lBpp.Text = String.Format("Bpp: {0}", 0);
lMetadataCount.Text = String.Format("Metadata: {0}", 0);
lComment.Text = String.Format("Image-comment: {0}", String.Empty);
lColors.Text = String.Format("Colors: {0}", 0);
}
}
// Update combobox for frame selection.
private void UpdateFrameSelection()
{
cbSelectFrame.Items.Clear();
if (Bitmap)
{
// Get number of frames in the bitmap
if (bitmap.FrameCount > 1)
{
// Add an entry for each frame to the combobox
for (int i = 0; i < bitmap.FrameCount; i++)
{
cbSelectFrame.Items.Add(String.Format("Frame {0}", i + 1));
}
}
}
}
// Returns true in case the variable 'bitmap'
// is set and not disposed.
private bool Bitmap
{
get { return ((bitmap != null) && (!bitmap.IsDisposed)); }
}
private void bLoadImage_Click(object sender, EventArgs e)
{
if (ofd.ShowDialog() == DialogResult.OK)
{
try
{
// Load the file using autodetection
FreeImageBitmap fib = new FreeImageBitmap(ofd.FileName);
// Rescale the image so that it fits the picturebox
// Get the plugin that was used to load the bitmap
FreeImagePlugin plug = PluginRepository.Plugin(fib.ImageFormat);
lImageFormat.Text = String.Format("Image-format: {0}", plug.Format);
// Replace the existing bitmap with the new one
ReplaceBitmap(fib);
}
catch
{
}
}
}
private void bSaveImage_Click(object sender, EventArgs e)
{
if (pictureBox.Image != null)
{
try
{
if (sfd.ShowDialog() == DialogResult.OK)
{
// Save the bitmap using autodetection
using (FreeImageBitmap temp = new FreeImageBitmap(pictureBox.Image))
{
temp.Save(sfd.FileName);
}
}
}
catch
{
}
}
}
private void bRotate_Click(object sender, EventArgs e)
{
if (Bitmap)
{
// Create a temporary rescaled bitmap
using (FreeImageBitmap temp = bitmap.GetScaledInstance(
pictureBox.DisplayRectangle.Width, pictureBox.DisplayRectangle.Height,
FREE_IMAGE_FILTER.FILTER_CATMULLROM))
{
if (temp != null)
{
// Rotate the bitmap
temp.Rotate((double)vRotate.Value);
if (pictureBox.Image != null)
{
pictureBox.Image.Dispose();
}
// Display the result
pictureBox.Image = (Bitmap)temp;
}
}
}
}
private void bGreyscale_Click(object sender, EventArgs e)
{
if (Bitmap)
{
// Convert the bitmap to 8bpp and greyscale
ReplaceBitmap(bitmap.GetColorConvertedInstance(
FREE_IMAGE_COLOR_DEPTH.FICD_08_BPP |
FREE_IMAGE_COLOR_DEPTH.FICD_FORCE_GREYSCALE));
}
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
ComboBox cb = sender as ComboBox;
if ((cb != null) && (cb.Items.Count > 0))
{
if (Bitmap)
{
try
{
// Switch the selected frame
bitmap.SelectActiveFrame(cb.SelectedIndex);
ReplaceBitmap(bitmap);
}
catch (ArgumentOutOfRangeException)
{
MessageBox.Show("Error changing frame.", "Error");
}
}
}
}
private void bAdjustGamma_Click(object sender, EventArgs e)
{
if (Bitmap)
{
// Adjust the gamma value
bitmap.AdjustGamma((double)vGamma.Value);
ReplaceBitmap(bitmap);
}
}
private void bRedChannelOnly_Click(object sender, EventArgs e)
{
// Mask out green and blue
SetColorChannels(0xFF, 0x00, 0x00);
}
private void bGreenChannel_Click(object sender, EventArgs e)
{
// Mask out red and blue
SetColorChannels(0x00, 0xFF, 0x00);
}
private void bBlueChannel_Click(object sender, EventArgs e)
{
// Mask out red and green
SetColorChannels(0x00, 0x00, 0xFF);
}
private void bAllChannels_Click(object sender, EventArgs e)
{
if (Bitmap)
{
// Restore the bitmap using the original
ReplaceBitmap(bitmap);
}
}
private void SetColorChannels(int redmask, int greenmask, int bluemask)
{
if (Bitmap)
{
// Create a temporary clone.
using (FreeImageBitmap bitmap = (FreeImageBitmap)this.bitmap.Clone())
{
if (bitmap != null)
{
// Check whether the bitmap has a palette
if (bitmap.HasPalette)
{
// Use the Palette class to handle the bitmap's
// palette. A palette always consist of RGBQUADs.
Palette palette = bitmap.Palette;
// Apply the new values for all three color components.
for (int i = 0; i < palette.Length; i++)
{
RGBQUAD rgbq = palette[i];
rgbq.rgbRed = (byte)(rgbq.rgbRed & redmask);
rgbq.rgbGreen = (byte)(rgbq.rgbGreen & greenmask);
rgbq.rgbBlue = (byte)(rgbq.rgbBlue & bluemask);
palette[i] = rgbq;
}
}
// In case the bitmap has no palette it must have a color depth
// of 16, 24 or 32. Each color depth needs a different wrapping
// structure for the bitmaps data. These structures can be accessed
// by using the foreach clause.
else if (bitmap.ColorDepth == 16)
{
// Iterate over each scanline
// For 16bpp use either Scanline<FI16RGB555> or Scanline<FI16RGB565>
if (bitmap.IsRGB555)
{
foreach (Scanline<FI16RGB555> scanline in bitmap)
{
for (int x = 0; x < scanline.Length; x++)
{
FI16RGB555 pixel = scanline[x];
pixel.Red = (byte)(pixel.Red & redmask);
pixel.Green = (byte)(pixel.Green & greenmask);
pixel.Blue = (byte)(pixel.Blue & bluemask);
scanline[x] = pixel;
}
}
}
else if (bitmap.IsRGB565)
{
foreach (Scanline<FI16RGB565> scanline in bitmap)
{
for (int x = 0; x < scanline.Length; x++)
{
FI16RGB565 pixel = scanline[x];
pixel.Red = (byte)(pixel.Red & redmask);
pixel.Green = (byte)(pixel.Green & greenmask);
pixel.Blue = (byte)(pixel.Blue & bluemask);
scanline[x] = pixel;
}
}
}
}
else if (bitmap.ColorDepth == 24)
{
// Iterate over each scanline
// For 24bpp Scanline<RGBTRIPLE> must be used
foreach (Scanline<RGBTRIPLE> scanline in bitmap)
{
for (int x = 0; x < scanline.Length; x++)
{
RGBTRIPLE pixel = scanline[x];
pixel.rgbtRed = (byte)(pixel.rgbtRed & redmask);
pixel.rgbtGreen = (byte)(pixel.rgbtGreen & greenmask);
pixel.rgbtBlue = (byte)(pixel.rgbtBlue & bluemask);
scanline[x] = pixel;
}
}
}
else if (bitmap.ColorDepth == 32)
{
// Iterate over each scanline
// For 32bpp Scanline<RGBQUAD> must be used
foreach (Scanline<RGBQUAD> scanline in bitmap)
{
for (int x = 0; x < scanline.Length; x++)
{
RGBQUAD pixel = scanline[x];
pixel.rgbRed = (byte)(pixel.rgbRed & redmask);
pixel.rgbGreen = (byte)(pixel.rgbGreen & greenmask);
pixel.rgbBlue = (byte)(pixel.rgbBlue & bluemask);
scanline[x] = pixel;
}
}
}
// Dispose only the picturebox's bitmap
if (pictureBox.Image != null)
{
pictureBox.Image.Dispose();
}
pictureBox.Image = (Bitmap)bitmap;
}
}
}
}
private void vRotate_Scroll(object sender, EventArgs e)
{
TrackBar bar = sender as TrackBar;
if (bar != null)
{
lRotate.Text = bar.Value.ToString();
}
}
private void nShowMetadata_Click(object sender, EventArgs e)
{
if (Bitmap)
{
MetaDataFrame mFrame = new MetaDataFrame();
mFrame.Tag = bitmap.Metadata;
mFrame.ShowDialog(this);
}
}
}
}

View File

@@ -0,0 +1,126 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="ofd.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="sfd.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>84, 17</value>
</metadata>
</root>

View File

@@ -0,0 +1,63 @@
namespace Sample11
{
partial class MetaDataFrame
{
/// <summary>
/// Erforderliche Designervariable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Verwendete Ressourcen bereinigen.
/// </summary>
/// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Vom Windows Form-Designer generierter Code
/// <summary>
/// Erforderliche Methode für die Designerunterstützung.
/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
/// </summary>
private void InitializeComponent()
{
this.tvMetadata = new System.Windows.Forms.TreeView();
this.SuspendLayout();
//
// tvMetadata
//
this.tvMetadata.Location = new System.Drawing.Point(12, 12);
this.tvMetadata.Name = "tvMetadata";
this.tvMetadata.Size = new System.Drawing.Size(389, 318);
this.tvMetadata.TabIndex = 3;
//
// MetaDataFrame
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(417, 349);
this.Controls.Add(this.tvMetadata);
this.DoubleBuffered = true;
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "MetaDataFrame";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "Metadata";
this.Load += new System.EventHandler(this.MetaDataFrame_Load);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.TreeView tvMetadata;
}
}

View File

@@ -0,0 +1,49 @@
using System;
using System.ComponentModel;
using System.Windows.Forms;
using FreeImageAPI;
using FreeImageAPI.Metadata;
namespace Sample11
{
public partial class MetaDataFrame : Form
{
public MetaDataFrame()
{
InitializeComponent();
}
private void MetaDataFrame_Load(object sender, EventArgs e)
{
ImageMetadata iMetadata = this.Tag as ImageMetadata;
if (iMetadata != null)
{
bool backup = iMetadata.HideEmptyModels;
iMetadata.HideEmptyModels = false;
try
{
// 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());
}
}
}
// Display error message
catch (Exception ex)
{
while (ex.InnerException != null)
ex = ex.InnerException;
MessageBox.Show(ex.ToString(), "Exception caught");
}
iMetadata.HideEmptyModels = backup;
}
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,16 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
[assembly: AssemblyTitle("")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: ComVisible(false)]
[assembly: Guid("219019e1-9a57-46c7-b9d7-3928a9277fd6")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,113 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.50727</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{996068CD-D07A-42E0-856F-ACC71E8565EF}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Sample11</RootNamespace>
<AssemblyName>Sample11</AssemblyName>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>none</ErrorReport>
<WarningLevel>4</WarningLevel>
<FileAlignment>512</FileAlignment>
<UseVSHostingProcess>false</UseVSHostingProcess>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>none</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>none</ErrorReport>
<WarningLevel>4</WarningLevel>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<FileAlignment>512</FileAlignment>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>none</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<FileAlignment>512</FileAlignment>
<DebugType>
</DebugType>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>none</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<FileAlignment>512</FileAlignment>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>none</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<FileAlignment>512</FileAlignment>
<DebugType>
</DebugType>
<PlatformTarget>x64</PlatformTarget>
<ErrorReport>none</ErrorReport>
</PropertyGroup>
<ItemGroup>
<Reference Include="FreeImageNET, Version=3.11.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\Bin\FreeImageNET.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
</ItemGroup>
<ItemGroup>
<Compile Include="MainForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="MainForm.Designer.cs">
<DependentUpon>MainForm.cs</DependentUpon>
</Compile>
<Compile Include="MetaDataFrame.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="MetaDataFrame.Designer.cs">
<DependentUpon>MetaDataFrame.cs</DependentUpon>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="MainForm.resx">
<SubType>Designer</SubType>
<DependentUpon>MainForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="MetaDataFrame.resx">
<SubType>Designer</SubType>
<DependentUpon>MetaDataFrame.cs</DependentUpon>
</EmbeddedResource>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>