使用CxImage实现图像格式转换Word文档格式.docx
《使用CxImage实现图像格式转换Word文档格式.docx》由会员分享,可在线阅读,更多相关《使用CxImage实现图像格式转换Word文档格式.docx(13页珍藏版)》请在冰点文库上搜索。
![使用CxImage实现图像格式转换Word文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/4/409cae76-7d8c-46ce-b535-26791d83b42d/409cae76-7d8c-46ce-b535-26791d83b42d1.gif)
右击打开文件位置
b.找到VS2010的启动项目devenv.exe:
右击属性兼容性特权等级,以管理员权限运行;
如果需要每个用户都以管理员权限运行,还可以更改所有用户的设置特权等级,以管理员权限运行。
c.然后在项目的打开方式中确保以VS2010为默认打开程序就好了。
在编译之前先将每个工程属性的CharacterSet由原先的UseUnicodeCharacterSet改为UseMulti-ByteCharacterSet(否则,在使用该库时,会出现类似:
errorC2664:
'
CxImage:
:
Save'
:
cannotconvertparameter1from'
constchar*'
to'
constTCHAR*'
的错误)。
首先编译jasper、jbig、jpeg、libdcr、libpsd、mng、png、tiff、zlib这9个库,然后编译cximage,cximagecrtdll,再接着编译cximagemfcdll。
在编译cximagemfcdll之前,先修改其属性,linker->
input->
AdditionalDependencies,将$(OutDir)png.lib等改为../../Debug/png.lib(../../Release/png.lib),最后编译demo、demodll;
全部编译完后即可生成相应的静态库和动态库。
编译cximagecrtdll可能会出现下面错误1:
1>
LIBCMT.lib(invarg.obj):
errorLNK2005:
__invalid_parameteralreadydefinedinMSVCRTD.lib(MSVCR100D.dll)
LIBCMT.lib(lseek.obj):
__lseekalreadydefinedinMSVCRTD.lib(MSVCR100D.dll)
LIBCMT.lib(dosmap.obj):
__errnoalreadydefinedinMSVCRTD.lib(MSVCR100D.dll)
LIBCMT.lib(crt0dat.obj):
__initterm_ealreadydefinedinMSVCRTD.lib(MSVCR100D.dll)
_exitalreadydefinedinMSVCRTD.lib(MSVCR100D.dll)
__amsg_exitalreadydefinedinMSVCRTD.lib(MSVCR100D.dll)
LIBCMT.lib(tidtable.obj):
__encoded_nullalreadydefinedinMSVCRTD.lib(MSVCR100D.dll)
LIBCMT.lib(mlock.obj):
__unlockalreadydefinedinMSVCRTD.lib(MSVCR100D.dll)
__lockalreadydefinedinMSVCRTD.lib(MSVCR100D.dll)
LIBCMT.lib(hooks.obj):
"
void__cdeclterminate(void)"
(?
terminate@@YAXXZ)alreadydefinedinMSVCRTD.lib(MSVCR100D.dll)
LIBCMT.lib(crt0init.obj):
___xi_aalreadydefinedinMSVCRTD.lib(cinitexe.obj)
___xi_zalreadydefinedinMSVCRTD.lib(cinitexe.obj)
___xc_aalreadydefinedinMSVCRTD.lib(cinitexe.obj)
___xc_zalreadydefinedinMSVCRTD.lib(cinitexe.obj)
处理方法:
打开属性配置页(右击项目名——>
单击Properties)——>
ConfigurationProperties目录下Linker中的Input中IgnoreSpecificDefaultLibraries添加库libcmt.lib。
编译cximagemfcdll可能出现的错误2:
找不到png.lib
在项目属性中正确添加库所在文件路径:
..\..\Debug,并将需要的库添加到附加依赖项AdditionalDependencies中。
值得一提的是,我遇到的无法打开lib或者无法解析函数问题均是通过更改链接输入的附加依赖项解决的(有时候需要切换属性->
配置属性-常规->
字符集)。
编译运行demo
1.先将demo设置为启动项目(方法见后文)。
如果直接运行,会出现以下错误:
stdafx.cpp
d:
\programfiles(x86)\microsoftvisualstudio10.0\vc\atlmfc\include\afxver_.h(81):
fatalerrorC1189:
#error:
Pleaseusethe/MDswitchfor_AFXDLLbuilds
设置如下:
2.此项目是静态链接,需要的是cimage目录下的众多头文件和众多lib库,前者在属性->
配置属性->
C\C++->
附加包含目录或属性->
包含目录中添加头文件所在的目录;
后者在属性->
链接器->
输入->
附加依赖项中添加lib各个文件项目。
注意的是cpp文件是不需要的,可以将cimage目录下的众多头文件拷到项目的某个目录中。
3.编译运行时出现了两个问题,一个是lib的问题,将lib的路径同样按照上面的方式重新配置了以后(注意相对路径是针对某个项目的)
4.接着出现了无法打开exe的问题,没办法,将属性->
常规中的输出目录和目标文件名给改了,我的是改成了$(SolutionDir)\bin\和demod,也就是和链接器->
常规中的输出文件弄成一致的,开始并不一致,这个很奇怪。
错误1:
cximage.lib(ximadsp.obj):
errorLNK2019:
unresolvedexternalsymbol"
void__cdeclstd:
_Debug_message(wchar_tconst*,wchar_tconst*,unsignedint)"
_Debug_message@std@@YAXPB_W0I@Z)referencedinfunction"
public:
void__thiscallstd:
deque<
structtagPOINT,classstd:
allocator<
structtagPOINT>
>
pop_front(void)"
pop_front@?
$deque@UtagPOINT@@V?
$allocator@UtagPOINT@@@std@@@std@@QAEXXZ)
__thiscallstd:
_Lockit:
~_Lockit(void)"
?
1_Lockit@std@@QAE@XZ)referencedinfunction"
_Container_base12:
_Orphan_all(void)"
_Orphan_all@_Container_base12@std@@QAEXXZ)
_Lockit(int)"
0_Lockit@std@@QAE@H@Z)referencedinfunction"
_Xlength_error(charconst*)"
_Xlength_error@std@@YAXPBD@Z)referencedinfunction"
protected:
_Xlen(void)const"
_Xlen@?
$allocator@UtagPOINT@@@std@@@std@@IBEXXZ)
处理方法
ConfigurationProperties目录下Linker中的Input中AdditionalDependencies添加库libcpmtd.lib。
编译运行demodll
1.此项目使用的动态链接,只需要cximage目录下的众多头文件,cximagecrtd.lib和cximagecrtd.dll(生成自项目cximagecrtdll)或cximaged.lib和cximaged.dll(生成自项目cximagemfcdll),头文件与lib文件的配置方式也与上面demo的一致。
这次lib的依赖路径没有修改,原来的是一致的,当然的不一致的也需要修改。
同样出现了无法打开exe文件的问题,同上面的方式,将输出目录和目标文件名给改了,我的是改成了$(SolutionDir)\bin\和demoddll
示例
1.新建一个控制台工程toJPEG(将png、bmp以及非标准格式的jpg格式的图片转为标准的jpg格式),将CharacterSet设为UseMulti-ByteCharacterSet。
2.从CxImage文件(..\CxImage\)中复制下列文件到工程目录:
xfile.h、ximacfg.h、ximadef.h、ximage.h、xiofile.h、xmemfile.h
3.从CxImage文件(..\Debug\)中复制下列文件到工程目录lib文件夹下:
png.lib、jpeg.lib、zlib.lib、cximage.lib
因为没有用到所有的库,所以在编译cximage.lib之前,需要在配置的头文件ximcfg.h中找到一些编译开关来关闭一些图像库。
4.添加lib
方法一:
直接在附加依赖项中添加;
方法二:
写在文件中
5.必需添加头文件ximage.h,代码如下:
参考文献
1.CxImage的编译及简单使用举例:
2.CxImage702在VS2010上的配置记录:
3.CxImage类库使用说明
设置为启动项的方法:
如果工程里有一个以上的可运行项目,将某个项目设置为启动项的方法:
右击该项目,在菜单中选择设置为启动项。
(一个启动项打开,另一个自动关闭)
CxImage工程
1.ximage.h文件
1、_MSC_VER定义编译器的版本(Microsoft的C编译器的版本);
2、#ifCXIMAGE_SUPPORT_BMP
CXIMAGE_FORMAT_BMP=1,
#endif
如果if后的语句成立,则执行if和endif中间的语句。