【转】cximage的动态库不能使用问题http://blog.csdn.net/secondfloor/archive/2009/07/29/4389520.aspx
因为一个任务的需要,上网找到了cximage库,从codeproject下载源代码和demo,同时和作者的官方下载的最新600比较,代码一致。
拿到代码后,用vc6代开cximage600_full目录下的CxImgLib.dsw,对cximage、cximagecrtdll、cimagemfcdll,以及其它所有的工程都编译了一遍(发现可能多次编译了,宁多勿少啊,呵呵),上网查资料得出结论是:cximage.lib是静态链接库,而有一篇文章写,静态lib库,在debug下可以,而在release下不能正常使用,cximagecrtdu.dll是不是用mfc的动态库,cximagedu.dll是使用mfc的动态库。而我是用的应用程序是需要用mfc,所以要用cximagedu.cll动态库了。
然后将cximage.lib,cximagedu.dll和cximage目录下的所有h文件拷贝到我的工程中,同时配置project setting中c++的code generation为debug mutilthread dll,precompiled header为no,link中包含lib,c++中包含头文件。一起配置好后,从网上抄录了一段代码。参考http://blog.csdn.net/mynamelj/archive/2008/12/28/3630630.aspx进行配置。
如下:
CxImage image; // 定义一个CxImage对象
// 从bmp文件转换为jpg文件(bmp -> jpg)
image.Load(L"image.bmp", CXIMAGE_FORMAT_BMP); //先装载bmp文件,需要指定文件类型
// 判断加载的bmp文件是否存在。
if (image.IsValid())
{
// Returns true if the image has 256 colors and a linear grey scale palette.
if(!image.IsGrayScale()) {
image.IncreaseBpp(8); // param nbit: 4, 8, 24
}
image.SetJpegQuality(99); // 设置图像的压缩质量参数(从0到100,数值越大,质量越高)
image.Save(L"image.png",CXIMAGE_FORMAT_PNG); // 把压缩后的图像以jpg文件类型保存起来。
}
编译都ok,link却报出:error LNK2001: unresolved external symbol "public: bool __thiscall CxImage ::Save (char const *,unsigned long)" (? ...
error LNK2001: unresolved external symbol "public: bool __thiscall CxImage ::Load (char const *,unsigned long)" (? ... 错误。
没办法,又上网查,居然发现好多人碰到类似问题,看了其它人的文章,其中提到一条编译后的库是unicode编码。
哦,问题找到了,我的工程是普通vc工程,当然是mbcs编码了,修改为unicode,修改入口为winMainCRTStartup。在编译一切ok了,可以将bmp转换成png图片了。
接下来继续将png的24位色转变8位色的工作了。