ECW 格式是 ERMapper 公司研发的一种利用小波变换算法的图像压缩格式。ERMapper 已经被 ERDAS 公司收购,ECW SDK 3.3 是 ERMapper 公司放出的最后一个开源的 ECW 开发包。下载地址:libecwj2-3.3
这个开发包中配有 VS8 的解决方案 .sln 文件。但是,在 VS 2008 下编译时还需要作出以下修改。
1. 修改 libecwj2-3.3/Source/C 目录下的所有 *.vcproj 文件,将其中的 /mapinfo:lines 全部删除,VS2008 版本不再支持这个参数。
2. 查看 libecwj2-3.3/Source/include/NCSJPCBuffer.h 文件,其中有一段代码为:
/** Maximum UINT8 value */
static const UINT32 MAXUINT8;
/** Maximum UINT16 value */
static const UINT32 MAXUINT16;
/** Maximum UINT32 value */
static const UINT32 MAXUINT32;
/** Minimum UINT8 value */
static const UINT32 MINUINT8;
/** Minimum UINT16 value */
static const UINT32 MINUINT16;
/** Minimum UINT32 value */
static const UINT32 MINUINT32;
/** Maximum INT8 value */
static const UINT32 MAXINT8;
/** Maximum INT16 value*/
static const UINT32 MAXINT16;
/** Maximum INT32 value */
static const UINT32 MAXINT32;
/** Minimum INT8 value */
static const INT32 MININT8;
/** Minimum INT16 value */
static const INT32 MININT16;
/** Minimum INT32 value */
static const INT32 MININT32;
这里面的 MAXUINT8 等变量与 VS2008 自带的 BaseTds.h 里面的预定义名称重复。将这些变量加一个下划线全部重新命名(当然,也可以命名为其它名字),如下,同时还要将整个解决方案中所有用到这些变量的地方也重新命名(有几十个地方,最好使用替换功能)。
/** Maximum UINT8 value */
static const UINT32 MAXUINT8_;
/** Maximum UINT16 value */
static const UINT32 MAXUINT16_;
/** Maximum UINT32 value */
static const UINT32 MAXUINT32_;
/** Minimum UINT8 value */
static const UINT32 MINUINT8_;
/** Minimum UINT16 value */
static const UINT32 MINUINT16_;
/** Minimum UINT32 value */
static const UINT32 MINUINT32_;
/** Maximum INT8 value */
static const UINT32 MAXINT8_;
/** Maximum INT16 value*/
static const UINT32 MAXINT16_;
/** Maximum INT32 value */
static const UINT32 MAXINT32_;
/** Minimum INT8 value */
static const INT32 MININT8_;
/** Minimum INT16 value */
static const INT32 MININT16_;
/** Minimum INT32 value */
static const INT32 MININT32_;
不做以上修改的话,编译的时候会报:error C2059: syntax error : '<L_TYPE_raw >' 错误。根据网上其它地方说的添加 _WIN32_WINNT 0x0500 其实也不行的。
可以直接下载编译好的包(包括 dll、lib 和 include):点这里。
也可以下载修改好的源代码:点这里。