65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.67/5 (8投票s)

2003年10月1日

viewsIcon

294640

downloadIcon

4664

本文提供了一个简化的 C# 包装器,用于 FreeImage 项目,以进行图形文件格式转换。

引言

FreeImage 是一个非常有用的开源项目,用于读取、操作和转换大量的图形格式。 然而,目前该库存在于 Win32 动态链接库中。 由于我对 C# 的最新兴趣,我决定为其创建一个简单的 Interop 包装器。

使用代码

代码的使用非常简单明了,这反映了 FreeImage 本身的实现。 对于我的需求,我希望能够获取 Portable Bitmap (PBM) 格式的图片文件并将其转换为标准的 Bitmap (BMP)。为此,我需要通过 FreeImage DLL 暴露 3 个方法,即 FreeImage_LoadFreeImage_SaveFreeImage_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);          
        }
    }
}
© . All rights reserved.