一、cximage600_full在VS2013编译和使用
1、编译
(1)下载后解压缩,直接打开根目录下的 CxImgLib.dsw文件。版本转换完成之后,在编译之前先将每个工程属性的字符集由原先的使用Unicode字符集改为使用多字节字符集,生成解决方案。
注:编译报错及解决方法
1)字符问题解决方法:编译之前先将每个工程属性的字符集由原先的使用Unicode字符集改为使用多字节字符集。
2)编译报错:Building an MFC project for a non-Unicode character set is deprecated. You must change the project property to Unicode or download an additional library。
解决方法:下载 Multibyte MFC Library for Visual Studio 2013并安装 http://www.microsoft.com/zh-cn/download/details.aspx?id=40770
3)编译报错:错误 6 error LNK1104: 无法打开文件“.\Debug\png.lib”。
解决方法:在编译cximagemfcdll之前,先修改其属性,链接器->输入->附加依赖项,将$(OutDir)png.lib等改为../../Debug/png.lib(../../Release/png.lib)。
4)编译报错:MFC does not support WINVER less than 0x0501. Please change the definition of WINVER in your project properties or precompiled header.
解决方法:cximage600_full\CxImage\CxImageDLL 和 cximage600_full\demo路径下的两个StdAfx.h 中的#define WINVER 0x0400改成#define WINVER 0x0501。
2、准备工作
CxImage的使用方式是动态库的,所以需要三种东西 include、lib、dll。
(1)include :cximage600_full\CxImage 路径下的头文件。
(2)lib:cximage600_full\CxImage\CxImageDLL 路径下,根据编译时选择的“解决方案配置”(就是debug、release之类)。会有对应的文件夹。我选择的是debug。所以会有一个debug文件夹,里面就有需要的lib文件。
(3)dll:cximage600_full\bin 路径下会有生成的dll。有两个dll。一个文件名里有 crt,另一个没有,不带crt的动态库就是给mfc用的。
3、测试
(1) 创建一个win32控制台应用程序做测试,创建项目后,先修改项目字符集,配置include和lib。
(2) 把1.jpg图片和cximage600_full\bin 目录下的dll文件放到测试的exe文件路径内。
(3) 编译执行后,就将1.jpg另存为2.png了。
-
#include "stdafx.h"
-
#include<iostream>
-
#include"ximage.h"
-
#pragma comment(lib,"cximagecrtd.lib")
-
-
int main(){
-
CxImage image;
-
image.Load("1.jpg");
-
image.Save("2.png", CXIMAGE_FORMAT_PNG);
-
return 0;
-
}
注:编译报错及解决方法
(1) 编译报错:error C2664: “bool CxImage::Load(const TCHAR *,DWORD)”: 无法将参数 1 从“const char [6]”转换为“const TCHAR *”。
解决方法:将字符集由使用Unicode字符集改为使用多字节字符集。
(2) 编译报错: error C4996: '_wfopen': This function or variable may be unsafe. Consider using _wfopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
解决方法:在项目属性C/C++->预处理器->预处理器定义中添加_CRT_SECURE_NO_WARNINGS
二、cximage702_full在VS2013编译和使用
1、编译
(1)从http://sourceforge.net/projects/cximage/下载最新的CxImage 702源码;解压缩后,用vs2013打开CxImageFull_vc10.sln工程。
(2) 在编译之前先将每个工程属性的字符集由原先的使用Unicode字符集改为使用多字节字符集。
(3) 首先编译jasper、jbig、jpeg、libdcr、libpsd、mng、png、tiff、zlib这9个库,然后编译cximage,cximagecrtdll。
(4)再接着编译cximagemfcdll,在编译cximagemfcdll之前,在编译cximagemfcdll之前,先修改其属性,链接器->输入->附加依赖项,将$(OutDir)png.lib等改为../../Debug/png.lib。
(5) 最后编译demo、demodll;全部编译完后即可生成相应的静态库和动态库。
2、具体说明
直接打开CxImageFull_vc10.sln,打开后发现共有该解决方案下共有14个项目,
(1)cximage、jasper、jbig、jpeg、libdcr、libpsd、mng、png、tiff、zlib这10个项目是生成静态库文件的,对应的静态库文件分别是cximage.lib,jasper.lib,jbig.lib,jpeg.lib,libdcr.lib, libpsd.lib,mng.lib,png.lib,tiff.lib,zlib.lib;
(2)CxImageCrtDll和cximagemfcdll这两个项目是生成动态库的;
(3)另外有demo和demodll这两个项目是演示用的,生成demo.exe和demodll.exe两个应用程序(在D:\\cximage702_full\bin目录下),两者之间的差别可能是一个使用的是静态库(demo),一个使用的是动态库(demodll)。
(4)整个解决方案项目之间的依赖关系是:
- 10个静态库文件不依赖任何其他项目;
- CxImageCrtDll和cximagemfcdll这两个项目依赖于除cximage外的其它静态库项目;
- demo依赖于10个静态库项目;
- demodll不依赖任何项目,但在链接器->输入->附加依赖项的时候发现,该项目依赖于10个静态库项目生成的对应lib文件,这些文件必须在此之前生成
根据依赖关系,在CxImageCrtDll,cximagemfcdll,demo任意一个项目上上右键生成,都会在相应的D:\\cximage702_full\Debug目录或者D:\\cximage702_full\Release\目录下得到静态库文件
(6)动态库文件的生成
生成文件在解决方案所在目录的bin目录下,Debug模式下:cximagecrtd.dll和cximaged.dll,同时注意Debug目录下分别有cximagecrtd.lib和cximaged.lib生成,这两个库文件在动态调用dll的时候有用。
3、准备工作
(1)建立D:\cximage702\cximage_build\Multi-byte文件夹,将编译好的CxImage文件夹下的所有头文件拷贝到include文件夹下。
(2)静态库的准备: 将debug模式下生成的静态库文件Debug目录下。
(3)动态库的准备:将bin目录下的cximaged.dll和cximagecrtd.dll提取出来备用。
4、测试
(1) 创建一个win32控制台应用程序做测试,创建项目后,先修改项目字符集,配置include和lib, 在项目属性C/C++->预处理器->预处理器定义中添加_CRT_SECURE_NO_WARNINGS。
(2) 把1.jpg图片和cximaged.dll和cximagecrtd.dll文件放到测试的exe文件路径内。
(3)测试程序,编译成功。
-
//stdafx.h
-
#pragma once
-
-
#include "targetver.h"
-
-
#include <stdio.h>
-
#include <tchar.h>
-
// TODO: 在此处引用程序需要的其他头文件
-
#include "./cximage_build/include/ximage.h"
-
-
#pragma comment(lib, "wininet.lib")
-
#pragma comment(lib, "./cximage_build/Debug/cximage.lib")
-
//#pragma comment(lib, "./cximage_build/Debug/jasper.lib")
-
//#pragma comment(lib, "./cximage_build/Debug/jbig.lib")
-
//#pragma comment(lib, "./cximage_build/Debug/jpeg.lib")
-
//#pragma comment(lib, "./cximage_build/Debug/libdcr.lib")
-
//#pragma comment(lib, "./cximage_build/Debug/libpsd.lib")
-
//#pragma comment(lib, "./cximage_build/Debug/mng.lib")
-
//#pragma comment(lib, "./cximage_build/Debug/png.lib")
-
//#pragma comment(lib, "./cximage_build/Debug/tiff.lib")
-
//#pragma comment(lib, "./cximage_build/Debug/zlib.lib")
-
//cximage_test.cpp
-
#include "stdafx.h"
-
#include <stdio.h>
-
#include <iostream>
-
#include <string>
-
using namespace std;
-
-
-
#ifdef _DEBUG
-
#define _CRTDBG_MAP_ALLOC
-
#include <stdlib.h>
-
#include <crtdbg.h>
-
#endif
-
-
int _tmain(int argc, _TCHAR* argv[])
-
{
-
CxImage image;
-
string imageName = "./1.jpg";
-
string imageSave = "./2.tif";
-
-
image.Load((const TCHAR*)imageName.c_str(), CXIMAGE_FORMAT_JPG);
-
-
cout << image.GetBpp() << endl;
-
-
if (image.IsValid()) {
-
image.GrayScale();
-
image.Save((const TCHAR*)imageSave.c_str(), CXIMAGE_FORMAT_TIF);
-
-
cout << "success" << endl;
-
}
-
-
cout << "ok" << endl;
-
return 0;
-
}
-