CxImage在VS2008下的编译(另外加入了自己的心得)

说实话CxImage,真是配置起来很麻烦。试验了网上说的好几种办法,都不行。我都想开骂了。折腾一天,找到一个哥们的blog,按照他说的配好了
(我因为要在2008下开发,最好还是用2008来编译CxImage,网上很多教程都是很老的6.0下编译的,通用性不够会有很多问题,我之前折腾一天,不成功,也可能有这个方面的原因)
基本过程是: 
1. 下载。。。 (最新的是cximage600_full)
2. 用vs2008打开源码工程。。 
3. 一些必要设置,很重要:
    有4个模式,其中切换到debug和unicode debug模式下,
    修改如下设置:
    对于目录下的13个项目,都要设置,分别是
    属性->C/C++->常规->调试信息格式:修改为 程序数据库(/Zi)
    属性->链接器->常规->启用增量连接:修改为 否(/INCREMENTAL:NO) 
    对于13个项目的debug和unicode模式都要修改 
    不修改的话中间可能会出现这种错误:LINK : fatal error LNK1000: Internal error during IncrBuildImage 
补充:另外2个模式release和un release不用管,你懂得
4. 然后对于解决方案 生成->批生成->全选->生成 

5. 等待一段很长时间等他生成完毕,13个项目,4个模式,总共52个 

补充:我自己在编译的时候,有一个错误,说其中一个工程,cximageMfcDll编译错误。然后我单独编译它,又好了

6. 构造自己的CxImage库:
    把CxImage目录下的头文件考到某个head文件夹中
    把CxImage/CxImageDLL这个目录下的lib文件考到某个lib文件夹中,4个模式,其中有分别对应CRT和MFC的,按照自己的需要来
    在bin目录下有8个DLL文件,这个后面会用到 
7. 新建一个项目,这里以CRT(win32 console application)项目为例
    新建好之后,修改属性:
    项目》属性》配置属性》常规 ,修改MFC的使用为 ”在共享Dll中“,修改字符集为多字节
    项目》属性》配置属性》c/c++》常规》附加包含目录 添加上一步建立的head文件夹
    项目》属性》配置属性》链接器》常规》附加库目录 添加上一步建立的lib文件夹
    项目》属性》配置属性》链接器》输入》附加依赖项 添加cximagecrtd.lib(这一步按照不同的工程可能不同)
    把上一步说到的bin目录下的8个DLL文件复制到源文件目录下(其实不必要8个,在不清楚的情况就8个一起复制过来) 
8. 写个程序测试一下:
[cpp] view plaincopyprint?
// test.cpp : 定义控制台应用程序的入口点。  
//  
#include "stdafx.h"  
#include "ximage.h"  
int _tmain(int argc, _TCHAR* argv[])  
{  
    CxImage *p = new CxImage;  
    p->Load("d://1.jpg",CXIMAGE_FORMAT_JPG);  
    p->Save("1.png",CXIMAGE_FORMAT_PNG);  
    return 0;  
}  
 
运行成功的话说明配置OK
我补充一点,如果需要用到其他的类,比如CxImageTIF ,又必须需再声明对应的头文件,但是按照这个哥们的,那h头文件包里是没CxImageTIF 这个类的头文件的。所以干脆把CxImage开源的源码里所有的头文件都搜索出来再放到一个文件夹里,也包含到工程里,就是说包含2次头文件。一个是小范围的,一个是所有的。

另外我还遇到奇怪的问题,按照这哥们说的“修改字符集为多字节”,但是我编译没问题,启动的时候,2008提示找不到mfc42d.dll, 好像是这个名字吧。我去网上搜索,mfc要改成 静态的,我照做了,问题更多。link都出错。然后我又window标准库,编译,出错,再改回到动态库,竟然又好了。反正是莫名其妙的。反正好了,也没深究了

我再补充一点:以上都是debug工程,恩,你会觉得,恩,不错很爽。等你正式发布的时候,调整到release模式,又出来一堆问题。还是一样,字符集用多字符模式才可以

///

如何读取一个多页TIFF 
CxImage cxMulti;
cxMulti.Load("c://multi.tif" , CXIMAGE_FORMAT_TIF);//加载一个多页tiff文件
int nPageCount = cxMulti.GetNumFrames();//得到tiff文件的页数
CxImage *pImageData = new CxImage[nPageCount+1];
for(int i=0;i<nPageCount;i++)
{
  cxMulti.SetFrame(i);//设置当前帧为i编号图像
  cxMulti.Load("c://multi.tif" , CXIMAGE_FORMAT_TIF);
  pImageData[i].Copy(cxMulti);//将此页图像复制到pImageData[i]中
}
if(pImageData)
{
   delete []pImageData;
   pImageData = NULL;
}
如何创建一副多页TIFF 
CxImage * pimage[ 3 ];
pimage[ 0 ] =& image1;
pimage[ 1 ] =& image2;
pimage[ 2 ] =& image3;
FILE * hFile;
hFile = fopen( " multipage.tif " , " w+b " );
CxImageTIF multiimage;
multiimage.Encode(hFile,pimage, 3 );
fclose(hFile);
或者
FILE * hFile;
hFile = fopen( " c://multi.tif " , "rb+ " );
CxImageTIF image;
image.Load( " c://1.tif " ,CXIMAGE_FORMAT_TIF);
image.Encode(hFile, true );
image.Load( " c://2.bmp " ,CXIMAGE_FORMAT_BMP);
image.Encode(hFile, true );
image.Load( " c://3.png " ,CXIMAGE_FORMAT_PNG);
image.Encode(hFile);

fclose(hFile);


以上代码,我自己在2008中测试了,有莫名其妙的错误,报告 unknown 什么什么错误。你们呢?希望有人留言,一起交流

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值