[VC6.0 MFC] 关于动态加载.jpg格式图片
目前做的是相机控制软件要求测试拍摄后能将图片预览到一个对话框里而在VC++6.0MFC里一般只能加载bmp图片,相机拍摄只有jpg和raw我在网上查过资料,最多的是用"O...
目前做的是相机控制软件
要求测试拍摄后能将图片预览到一个对话框里
而在VC++6.0 MFC里一般只能加载bmp图片,相机拍摄只有jpg和raw
我在网上查过资料,最多的是用
"OleLoadPicture创建了一个IPicture类型的COM接口对象"
可我需要动态地引用资源,而不是在编写程序时载入固定资源
(图片是程序运行时相机拍摄的,不可能提前载入)
问1:这个OleLoadPicture到底能不能实现动态加载?
问2:如果可以,请问需要什么样的动态库或文件,是否需要另行下载
问3:有没有详细的或是可行的实例
问4:除了这类方法,有没有其他更易使用的
也看过GDI+,不知道这种方法是否可行
因为时间有限所以不想做太多研究,先找对一个方向猛攻
希望有经验的朋友能支招,感激不尽
追加50分...
6.0打开的快,轻便些,加了Visual Assist,比较习惯用这个
不过,现在6.0的项目已经做了一半了,能不能挪到2008里继续做呢?
6.0的atl库太难找,我看.net里有但需要改
.net2003和.net2005我倒是都有,atlImage.h文件可以直接从里面找到么? 展开
要求测试拍摄后能将图片预览到一个对话框里
而在VC++6.0 MFC里一般只能加载bmp图片,相机拍摄只有jpg和raw
我在网上查过资料,最多的是用
"OleLoadPicture创建了一个IPicture类型的COM接口对象"
可我需要动态地引用资源,而不是在编写程序时载入固定资源
(图片是程序运行时相机拍摄的,不可能提前载入)
问1:这个OleLoadPicture到底能不能实现动态加载?
问2:如果可以,请问需要什么样的动态库或文件,是否需要另行下载
问3:有没有详细的或是可行的实例
问4:除了这类方法,有没有其他更易使用的
也看过GDI+,不知道这种方法是否可行
因为时间有限所以不想做太多研究,先找对一个方向猛攻
希望有经验的朋友能支招,感激不尽
追加50分...
6.0打开的快,轻便些,加了Visual Assist,比较习惯用这个
不过,现在6.0的项目已经做了一半了,能不能挪到2008里继续做呢?
6.0的atl库太难找,我看.net里有但需要改
.net2003和.net2005我倒是都有,atlImage.h文件可以直接从里面找到么? 展开
3个回答
展开全部
OleLoadPicture可以动态加载。
Ole32.dll olepro32.dll
eg:
void DisplayImage(HDC hDC, LPCTSTR szImagePath)
{
HANDLE hFile=CreateFile(szImagePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); //从指定的路径szImagePath中读取文件句柄
DWORD dwFileSize=GetFileSize(hFile, NULL); //获得图片文件的大小,用来分配全局内存
HGLOBAL hImageMemory=GlobalAlloc(GMEM_MOVEABLE, dwFileSize); //给图片分配全局内存
void *pImageMemory=GlobalLock(hImageMemory); //锁定内存
DWORD dwReadedSize; //保存实际读取的文件大小
ReadFile(hFile, pImageMemory, dwFileSize, &dwReadedSize, NULL); //读取图片到全局内存当中
GlobalUnlock(hImageMemory); //解锁内存
CloseHandle(hFile); //关闭文件句柄
IStream *pIStream;//创建一个IStream接口指针,用来保存图片流
IPicture *pIPicture;//创建一个IPicture接口指针,表示图片对象
CreateStreamOnHGlobal(hImageMemory, false, &pIStream) //用全局内存初使化IStream接口指针
OleLoadPicture(pIStream, 0, false, IID_IPicture, (LPVOID*)&(pIPicture));//用OleLoadPicture获得IPicture接口指针
//得到IPicture COM接口对象后,你就可以进行获得图片信息、显示图片等操作
OLE_XSIZE_HIMETRIC hmWidth;
LE_YSIZE_HIMETRIC hmHeight;
pIPicture->get_Width(&hmWidth); //用接口方法获得图片的宽和高
pIPicture->get_Height(&hmHeight);
pIPicture->Render(hDC,0,0,100,100,0,hmHeight,hmWidth,-hmHeight,NULL); //在指定的DC上绘出图片
GlobalFree(hImageMemory); //释放全局内存
pIStream->Release(); //释放pIStream
pIPicture->Release(); //释放pIPicture
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lanmanck/archive/2009/04/04/4048697.aspx
GDI+也可以,但本质上和 CImage ,IPicture,使用的内核都是一样。
Ole32.dll olepro32.dll
eg:
void DisplayImage(HDC hDC, LPCTSTR szImagePath)
{
HANDLE hFile=CreateFile(szImagePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); //从指定的路径szImagePath中读取文件句柄
DWORD dwFileSize=GetFileSize(hFile, NULL); //获得图片文件的大小,用来分配全局内存
HGLOBAL hImageMemory=GlobalAlloc(GMEM_MOVEABLE, dwFileSize); //给图片分配全局内存
void *pImageMemory=GlobalLock(hImageMemory); //锁定内存
DWORD dwReadedSize; //保存实际读取的文件大小
ReadFile(hFile, pImageMemory, dwFileSize, &dwReadedSize, NULL); //读取图片到全局内存当中
GlobalUnlock(hImageMemory); //解锁内存
CloseHandle(hFile); //关闭文件句柄
IStream *pIStream;//创建一个IStream接口指针,用来保存图片流
IPicture *pIPicture;//创建一个IPicture接口指针,表示图片对象
CreateStreamOnHGlobal(hImageMemory, false, &pIStream) //用全局内存初使化IStream接口指针
OleLoadPicture(pIStream, 0, false, IID_IPicture, (LPVOID*)&(pIPicture));//用OleLoadPicture获得IPicture接口指针
//得到IPicture COM接口对象后,你就可以进行获得图片信息、显示图片等操作
OLE_XSIZE_HIMETRIC hmWidth;
LE_YSIZE_HIMETRIC hmHeight;
pIPicture->get_Width(&hmWidth); //用接口方法获得图片的宽和高
pIPicture->get_Height(&hmHeight);
pIPicture->Render(hDC,0,0,100,100,0,hmHeight,hmWidth,-hmHeight,NULL); //在指定的DC上绘出图片
GlobalFree(hImageMemory); //释放全局内存
pIStream->Release(); //释放pIStream
pIPicture->Release(); //释放pIPicture
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lanmanck/archive/2009/04/04/4048697.aspx
GDI+也可以,但本质上和 CImage ,IPicture,使用的内核都是一样。
展开全部
mark一下,有时间我给你看看。 - -#
其实,正如二楼所说的,用2005或2008很简单的
#include <atlimage.h>
CImage img;
HRESULT hResult;
hResult = img.Load(_T("C:\\xxx.jpg"));
用cximage或者gdi+处理JPG都是可行的,GDI+相对来说更容易用。
raw文件就得自己处理了,因为raw文件格式也不是固定的标准格式。
另外相机控制控件,重新封装一下twain的库和接口即可。
至于,MFC我在看看吧,毕竟比较落伍了 - -#
其实,正如二楼所说的,用2005或2008很简单的
#include <atlimage.h>
CImage img;
HRESULT hResult;
hResult = img.Load(_T("C:\\xxx.jpg"));
用cximage或者gdi+处理JPG都是可行的,GDI+相对来说更容易用。
raw文件就得自己处理了,因为raw文件格式也不是固定的标准格式。
另外相机控制控件,重新封装一下twain的库和接口即可。
至于,MFC我在看看吧,毕竟比较落伍了 - -#
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用atl的CImage类。
vc++.net以后的版本有,vc6的,你可以自己找个atl库。
我就搞不明白了,vc6都10年了,为什么还这么多人用。
vc2008不好吗
可以直接找到的。从vc6到高版本转换,只要你没使用非标准c++的东西,直接就能编译。
vc++.net以后的版本有,vc6的,你可以自己找个atl库。
我就搞不明白了,vc6都10年了,为什么还这么多人用。
vc2008不好吗
可以直接找到的。从vc6到高版本转换,只要你没使用非标准c++的东西,直接就能编译。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询