使用GDI+在程序中显示一幅JPG图像的时候,若文件在硬盘上则操作极为简单:
Image image(L"E://your.JPG");
Graphics graphics(GetDC()->m_hDC);
graphics.DrawImage(&image,0,0);
有趣的是,若图像存在于程序资源中时,要实现相同的效果却麻烦了很多,你说微软的人是不是有些8*%@(^@^):
实现的流程是这样的:
1.先用FindResource,LoadResource,LockResource三个函数得于指向资源的指针(由LockResource返回,假定是lpvoid);
2.通过StgCreateStorageEx创建IStorage,再由IStorage创建一个IStream;
3.调用IStream::Write(lpvoid,size,NULL)将由资源数据写入到IStream中;
4.Image image(m_stream) 注:m_stream为上述过程中创建的IStream对象;
5.余下步骤同上.
下面给出关键代码:(创建一个单文档,在:OnDraw()中实现本例功能)
void CShowJpgFromResView::OnDraw(CDC* /*pDC*/)
{
// ......................
HRSRC hrsrc=::FindResource(::AfxGetInstanceHandle(),
MAKEINTRESOURCE(IDR_JPG1),L"jpg");
HGLOBAL hglobal=::LoadResource(::AfxGetInstanceHandle(),hrsrc);
LPVOID pvoid=::LockResource(hglobal);
DWORD dw=::SizeofResource(::AfxGetInstanceHandle(),hrsrc);
IStorage *m_stor;
::StgCreateStorageEx(L"D://test.stg",STGM_CREATE|STGM_SHARE_EXCLUSIVE|
STGM_READWRITE,STGFMT_STORAGE,0,
0,0,IID_IStorage,(void**)&m_stor);
IStream *m_stream;
m_stor->CreateStream(L"MyStream",STGM_CREATE|STGM_READWRITE|
STGM_DIRECT|STGM_SHARE_EXCLUSIVE,0,0,(IStream**)&m_stream);
m_stream->Write(pvoid,dw,NULL);
Graphics graphics(GetDC()->m_hDC);
Image image(m_stream);
graphics.DrawImage(&image,0,0);
}
---枯海(http://blog.csdn.net/xiaodao1986)
分享到:
相关推荐
本书是一本为.NET开发人员讲授如何编写Windows和Web图形应用程序的专著,书中全面介绍了GDI+和Windows图形程序设计的基本知识和GDI+图形程序设计的各个方面。 本书适合于开发GDI+图形应用程序的初、中级程序员...
GDI+开发包,解压文件,并将其中的Includes和Lib中的文件复制到VS安装目录中VC98目录下的Includes和Lib文件夹中
GDI+开发的帮助文档,讲得清晰浅显,而且是中文的.如果学习GDI+开发的话,... 在我另外一个资源中提供了一个详细的SDK,包含了进行开发所需要的全部内容:头文件,库文件和dll,欢迎下载,共同学习. 或者直接百度搜索"GDI+ SDK
C#GDI+小游戏 飞机大战C#GDI+小游戏 飞机大战C#GDI+小游戏 飞机大战C#GDI+小游戏 飞机大战C#GDI+小游戏 飞机大战
CGdiPlusBitmapTest GDI+ 显示各式图片 JPG BMP PNG VC
C#WinForm利用GDI+的双缓冲技术来提高绘图效率.pdf
GDI+是Windows XP中的一个子系统,它主要负责在显示屏幕和打印设备输出有关信息,它是一组通过C++类实现的应用程序编程接口。顾名思义,GDI+是以前版本GDI的继承者,出于兼容性考虑,Windows XP仍然支持以前版本的...
GDI+功能强大,本算法充分演示了如何利用GDI+对各种图像进行分类管理,做成自己的图像素材库。 下载后要记得给我评分、发表意见哦。
GDI+的说明 GDI+的说明 GDI+的说明 GDI+的说明
Gdi+和Jpgdll 处理Jpeg图像 内含说明文档 Gdi+压缩包含有.h文件、.lib文件和.dll文件
简单的VC++显示图片源代码,使用GDI+显示jpg,png/bmp等常用格式的图片。
GDI+中发生一般性错误GDI+中发生一般性错误GDI+中发生一般性错误GDI+中发生一般性错误
GDI+的一个优点就是可以直接使用jpg图像,在这个示例中,我没有把图像文件放在资源中,而是动态读取,一是由于项目需求,图像数目是未知的;二是由于动态读文件效率低下,使用双缓冲更能体现出优势。 在实现过程中...
1.4 .NET中的GDI+ 名称空间和类 总结 第2章 第一个GDI+ 应用程序 2.1 绘制表面 2.2 坐标系统 2.3 指南——第一个GDI+ 应用程序 2.4 一些基本的GDI+ 对象 总结 第3章 Graphics类 3.1 Graphics类的属性 3.2 ...
使用 GDI+ 显示 GIF 图像,打开工程后先点击“组建”->“全部重建”,再运行。
对于图像文件,GDI+所关心的不是图像文件的文件头信息,不论要打开的文件格式是什么类型,GDI+首先要做的是在注册表中查看该图像格式的编码(或解码)信息是否已经注册(HKEY_CLASSES_ROOT\MIME\Database\Content ...
用于测试采用GDI+技术和delphi 直接显示JPG以及PNG图像的软件,评估图像显示效果和速度,软件中包括GDI+程序源代码