用WTL的文件对话框打开图片,D3D渲染
来源:互联网 发布:php图片一句话木马 编辑:程序博客网 时间:2024/05/22 15:01
演示程序下载:http://download.csdn.net/detail/jiangcaiyang123/4061511
程序还不如人意(Bug included),我只是为了阐述一个技术点而进行的实验。请见谅。
谁说WTL的作用不大?在我还未了解开源的界面库之前,使用WTL成为了我的唯一选择。还有一个原因是我没有学过MFC。通常来说,使用标准的界面来选择一个文件来载入对我们来说已经够用了。如果你富有余力,可以自己动手使用DirectX来实现文件对话框。当然如果你是拥有至少半年经验的DXUT程序员,你可以求助它。我看到DXUT写的一个CustomUI程序例子,我真的好想了解这里面究竟是怎么实现的啊。可惜这个采用了DXUT框架,要学这个框架还要好一些功夫呢。
好了,言归正传。这个例子程序的特点之一就是结合了WTL/ATL和DirectX。使用WTL现成的一个文件对话框来选择一个图像文件,这个图像文件的格式可以使JPG和PNG。当然其它的图片也是可以的,只要图片文件合法且不要过大。随后使用D3D来载入图像,形成一个纹理。渲染纹理使用了最简单的滤波方式,所以图像看起来可能有些锯齿。
下载了演示程序的人会发现,这个程序可以独立运行,并且可以显示两个图片。那么这又是怎么做到的呢?我采取的方法是将两个图片做成资源嵌入程序中,VS允许我们这么做。然后我们也必须从资源中载入图像出来,DirectX也允许我们这么做,但是有一些限制。数年前我也想了很多办法,但都失败了。直到有一次,我在GameRes的一个帖子里面发现了载入的方法。现在以我这个演示程序为例,说明一下载入的步骤。(我的是VS2005,理论上其余的版本都应该有效。)
这是我开发时候的截图:
首先点击“添加→资源”,如下图所示。
选择“导入”,如下图所示。
文件类型选“所有文件”,然后点击我们想要载入的.png或者是.jpg文件,点击打开。如下图所示。
在自定义资源类型对话框中,输入RC_DATA,然后点确定。如下图所示。
现在我们载入的图像文件已经变成一系列二进制文本了。如下图所示。
载入时,使用D3DXCreateTextureFromResourceEx()函数。当然使用它的简单版本D3DXCreateTextureFromResourceEx()也是可以的。下面是该函数的使用方法:
hr = D3DXCreateTextureFromResourceEx(// 从资源创建纹理m_pDevice,// DIRECT3DDEVICE9结构指针NULL,// 模块句柄MAKEINTRESOURCE( IDR_RCDATA1 ),// 载入的图像资源名称D3DX_DEFAULT,// 宽D3DX_DEFAULT,// 高D3DX_FROM_FILE,// mip级别0,// 用途D3DFMT_A8R8G8B8,// 格式D3DPOOL_MANAGED,// 内存池格式D3DX_DEFAULT,// 滤波器D3DX_DEFAULT,// mip滤波器0,// 关键色(作掩码用)&imageInfo,// 源文件信息NULL,// 调色板&m_pTexBackground );
MAKEINTRESOURCE是一个宏,用于指定载入图像数据位于程序内部的位置。IDR_RCDATA1被包含在resource.h里,需要使用#include语句包括。
一切就绪后,我们就可以看到我们的程序不用任何图像文件就可以独立运行了。
使用WTL要注意,因为我并不是要建立一个WTL应用程序,所以我们必须手动处理一些头文件。atlbase.h、atlapp.h和atldlgs.h都是需要包含在内的。使用CFileDialog的方法也和MFC中大同小异。所以BrowseImageFile()函数的样子应该是这样:
void CRenderByFileDialog::BrowseImageFile( void )// 浏览并且获取图像文件的路径{CFileDialog imageFileDlg( TRUE,TEXT( ".jpg" ),m_CurImageFile.c_str( ),OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,TEXT( "JPG/JPEG文件\0*.jpg\0PNG文件\0*.png\0所有文件\0*.*" ),NULL );if ( IDOK == imageFileDlg.DoModal( ) ){m_CurImageFile = imageFileDlg.m_szFileName;}}
如果你还没有安装WTL,那么请使用查看我以前写过的文章,这里有详细介绍安装WTL的方法。
以下就是程序的截图:
- 用WTL的文件对话框打开图片,D3D渲染
- MFC和WTL 框架下如何弹出“打开文件对话框"
- 我使用的WTL对话框包含文件
- 魔兽世界模型文件.m2 在D3D下的渲染
- WTL文件选择对话框 - CFileDialogImpl
- wtl 选择对话框 文件过滤
- 点击图片或按钮打开文件对话框
- 自定义的打开文件对话框
- 安全的打开文件对话框
- 文件对话框的打开方式
- unity 文件对话框的打开
- VC用对话框打开文件
- WTL文件选择对话框多文件选择
- 基于对话框的图片打开与显示
- D3D中透明渲染的总结
- 问题: D3D 渲染的一点思考
- D3D中透明渲染的总结
- DDraw、D3D渲染效果的分析
- Iphone SDK 实例--新手必读
- LHF Objective-C语法(9)内存管理
- Delete 多态类数组
- mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication
- c讀取文本文件並將單詞存入數組排序輸出
- 用WTL的文件对话框打开图片,D3D渲染
- 关于标准c中的strtok和linux库里面的strsep
- 学习ACE
- C++利用Windows API 创建多线程
- 在命令行查看PDF文件 office文件
- HTML5应用——简易播放器
- pl/sql常用脚本3
- 高性能Web服务器Nginx的配置与部署研究(15)Upstream负载均衡模块
- 模板函数的声明和定义都放在一个文件中