用于图形图像格式转换的 C# FreeImage DLL 包装器






4.67/5 (8投票s)
2003年10月1日

294640

4664
本文提供了一个简化的 C# 包装器,用于 FreeImage 项目,以进行图形文件格式转换。
引言
FreeImage 是一个非常有用的开源项目,用于读取、操作和转换大量的图形格式。 然而,目前该库存在于 Win32 动态链接库中。 由于我对 C# 的最新兴趣,我决定为其创建一个简单的 Interop 包装器。
使用代码
代码的使用非常简单明了,这反映了 FreeImage 本身的实现。 对于我的需求,我希望能够获取 Portable Bitmap (PBM) 格式的图片文件并将其转换为标准的 Bitmap (BMP)。为此,我需要通过 FreeImage DLL 暴露 3 个方法,即 FreeImage_Load
、FreeImage_Save
和 FreeImage_Unload
,其签名如下:
DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Load(FREE_IMAGE_FORMAT fif,
const char *filename, int flags FI_DEFAULT(0));
DLL_API BOOL DLL_CALLCONV FreeImage_Save(FREE_IMAGE_FORMAT fif,
FIBITMAP *dib, const char *filename, int flags FI_DEFAULT(0));
DLL_API void DLL_CALLCONV FreeImage_Unload(FIBITMAP* dib);
现在这些 C# Interop 签名是:
public class FreeImage
{
[DllImport("FreeImage.dll")]
public static extern int FreeImage_Load(FIF format,
string filename, int flags);
[DllImport("FreeImage.dll")]
public static extern void FreeImage_Unload(int handle);
[DllImport("FreeImage.dll")]
public static extern bool FreeImage_Save(FIF format,
int handle, string filename, int flags);
}
例如,要将图形图像从 PBM 转换为 BMP,您只需要执行以下操作(请注意 enum
FIF
未在此处记录,但可以在源代码中找到)。
namespace Test
{
class MainClass
{
public static void Main(string[] args)
{
int handle = FreeImageAPI.FreeImage.FreeImage_Load(
FreeImageAPI.FIF.FIF_PBM,
@"c:\image.pbm",
0);
FreeImageAPI.FreeImage.FreeImage_Save(
FreeImageAPI.FIF.FIF_BMP,
handle,
@"c:\image.bmp",
0);
FreeImageAPI.FreeImage.FreeImage_Unload(handle);
}
}
}