VC6 CImage 加载jpg png bmp
From: http://hi.baidu.com/crazyonline/blog/item/3bad6959b2d31b232934f0f4.html
今天改一個VC6的程序,因為需要加載png和jpg圖像,于是想到了CImage,但是VC6又不支持CImage類,郁悶了,網上看了一下,都是改這改那,改得頭大。后來看到有一個人提出一個建議,用VS2008寫一個DLL讓VC6去動態加載不就OK了。恩,這個注意不錯,于是乎就這么做了吧
先建立一個工程,叫AtlImage吧,在AtlImage頭文件中聲明[自動向導其實幫我生成了]:
#ifdef ATLIMAGE_EXPORTS
#define ATLIMAGE_API __declspec(dllexport)
#else
#define ATLIMAGE_API __declspec(dllimport)
#endif
//需要添加一個extern C,否則導出函數名···額郁悶死你
extern "C" ATLIMAGE_API HBITMAP LoadAtlImage(const char * pFileName);
然后在AtlImage.cpp中實現:
// AtlImage.cpp : Defines the exported functions for the DLL application.
//
#include "stdafx.h"
#include "AtlImage.h"
#include <atlimage.h>
// This is an example of an exported function.哇靠,下面夠簡單吧
ATLIMAGE_API HBITMAP LoadAtlImage(const char * pFileName)
{
CImage image;
HRESULT hr=image.Load(pFileName);
if (SUCCEEDED(hr))
{
?? return image.Detach();
}
else
{
?? return NULL;
}
}
oK,編譯成一個release版的DLL即可成功加載,在需要使用的地方如下聲明:
typedef HBITMAP (*LoadImageFunc)(const char *pStrFileName);
m_funLoadAtlImage=NULL;
m_hModule=::LoadLibrary("AtlImage.dll");
if(!m_hModule)
{
?? AfxMessageBox("缺少動態鏈接庫:AtlImage.dll");
?? m_hModule=NULL;
}
m_funLoadAtlImage=(LoadImageFunc)::GetProcAddress(m_hModule,"LoadAtlImage");
if (!m_funLoadAtlImage)
{
?? AfxMessageBox("Function Miss : LoadAtlImage");
?? m_funLoadAtlImage=NULL;
}
HBITMAP hBitmap=m_funLoadAtlImage(“test.png”);
FreeLibrary(m_hModule); //最后還是釋放一下資源
萬事大吉.如果你很懶,直接需要DLL的留Email吧。百度空間不能存文件,不然我直接貼上來了···哎
忽然想到一個問題,我可以存到msdn上面去,哈哈。下面是下載地址:
http://download.csdn.net/source/1691273
總結
以上是生活随笔為你收集整理的VC6 CImage 加载jpg png bmp的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言标准库函数大全(ctype、tim
- 下一篇: s3c2440移植MQTT