能用于 VC6 的 CImage 类
对于图像操作,在遥远的计算机蛮荒时代,我们一般使用 CBitmap 类,这个类在 MFC 和 WTL 上均有实现。至于 DIB 格式的图像,以及文件存盘的操作,CBitmap 类就无能为力了。我们只能求助于自己来实现或者用别人实现的类了。
时代总是进步的,到 VC7 以后了,ATL 框架内增加了一个 CImage 类,基本上完成了上述的述求。但顽固如我等人,却一定要在 VC6 的圈子里混(因为编译出来的可执行文件不用带一大堆什么.Net框架,什么带manifest的古怪东东,又是什么神秘的特定版本的运行时DLL等等,我只想我的简单程序能顺畅的运行在所有的 Windows 平台上,如此而已),就开始倒行逆施的改造了 CImage 类了,改造如下。
这个类用到了 CString 类,这就必须要 WTL 才能工作,当然 MFC 框架应该也能。
还用到了 GDIplus,因此您最好还要下载能支持 VC6 的最后版本的 Platform SDK,且将 VC6 打上 SP6 补丁才能用。
一些资源的下载地址:
- 官方的原版 VC6sp6 补丁下载地址如下:请看清你需要的是中文还是英文
英文版地址: http://download.microsoft.com/download/1/9/f/19fe4660-5792-4683-99e0-8d48c22eed74/Vs6sp6.exe
简体中文版地址:http://download.microsoft.com/download/e/c/9/ec94a5d4-d0cf-4484-8b7a-21802f497309/Vs6sp6.exe - 最后一个支持 VC6 的 PSDK 下载地址 http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm
- 最新版本的 WTL 的下载地址是 http://wtl.sourceforge.net/
下面是使用注意事项:
在您的工程的 stdafx.h 文件的顶打头, 定义一个宏
#define __VC6_ATL_IMAGE_H__ 1
在 stdafx.h 的靠近下部包含这个文件
#include <ATLIMAGE.H>
在 stdafx.cpp 文件的末尾加上这么几句
#if _MSC_VER < 1300 CImage::CInitGDIPlus CImage::s_initGDIPlus; CImage::CDCCache CImage::s_cache; #endif
然后, 我们改工程的属性:
菜单项 “project” -> “settings” 蹦出 “Project settings” 对话框 “C/C++” -> “Category:” -> “Procompiled headers”
选中 “Not using precompiled headers” 单选按钮, 不使用预编译头.
(这里顺便一说, 建议同学们以后的工程都不使用预编译头, 这项 M$ 提供的特性给您造成的麻烦比给你的好处要多的多的多的多的多).

到这时, 就可以使用 CImage 类了啦, 比如说从磁盘文件装入图像, 保存图像文件, DIB 操作, 等等.
以下内容就是更改后的 atlimage.h 文件
atlimage.h
例子程序
vvvvvv

请问 stdafx.h是怎么来的,另外请问是否只有使用 你改过的atlimage.h就可以使用CImage啦?还是说在自己的.cpp文件还要做什么特殊的处理?小弟愚笨,还请赐教!
使用时老报错:please define __VC6_ATL_IMAGE_H__ flag in stdafx.h file’s begin and following…
可是我都已经按照你说的配置啦stdafx.h啊,请问究竟是什么原因,谢谢!
@小李
你够矬的, 上传了个例子程序, 自己看看吧. 别说你还不懂哟.