图片显示器.doc
《图片显示器.doc》由会员分享,可在线阅读,更多相关《图片显示器.doc(11页珍藏版)》请在咨信网上搜索。
// 消息处理 void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) { switch(id) { case IDC_OK: { TCHAR path[MAX_PATH+1]; OpenFile(hwnd,IDC_EDTPATH); ZeroMemory(path,sizeof(path)); GetDlgItemText(hwnd,IDC_EDTPATH,path,sizeof(path)); HDC hDC=GetDC(hwnd); DisplayImage(hDC,path); ReleaseDC(hwnd,hDC); } break; default: break; } } // 打开文件对话框 void OpenFile(HWND hwnd,int nIDDlgItem) { OPENFILENAME ofn; char szFile[MAX_PATH]; ZeroMemory(&ofn,sizeof(ofn)); ofn.lStructSize = sizeof(ofn); ofn.lpstrFile = szFile; ofn.lpstrFile[0] = TEXT('\0'); ofn.nMaxFile = sizeof(szFile); ofn.lpstrFileTitle = NULL; ofn.nMaxFileTitle = 0; ofn.lpstrTitle=TEXT("打开文件对话框"); ofn.lpstrFilter = TEXT("JPG | JPEG\0*.jpg;*.jpeg\0GIF\0*.gif\0\0"); ofn.nFilterIndex = 1; ofn.lpstrInitialDir = NULL; ofn.Flags = OFN_EXPLORER|OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST; GetOpenFileName(&ofn); SetDlgItemText(hwnd,nIDDlgItem,szFile); } // 显示JPEG或GIF格式图片 void DisplayImage(HDC hDC, LPCTSTR szImagePath) { // 实际读取的文件大小 DWORD dwReadedSize; // 创建一个IStream接口指针,用来保存图片流 IStream *pIStream; // 创建一个IPicture接口指针,表示图片对象 IPicture *pIPicture; // 原始图像的宽度和高度 OLE_XSIZE_HIMETRIC hmWidth; OLE_YSIZE_HIMETRIC hmHeight; // 根据指定路径szImagePath获取文件句柄 HANDLE hFile=CreateFile(szImagePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); // 获得图片文件的大小 DWORD dwFileSize=GetFileSize(hFile, NULL); // 给图片分配全局内存 HGLOBAL hImageMemory=GlobalAlloc(GMEM_MOVEABLE, dwFileSize); // 锁定内存 void *pImageMemory=GlobalLock(hImageMemory); // 读取图片到全局内存当中 ReadFile(hFile, pImageMemory, dwFileSize, &dwReadedSize, NULL); // 解锁内存 GlobalUnlock(hImageMemory); // 关闭文件句柄 CloseHandle(hFile); // 用全局内存初使化IStream接口指针 CreateStreamOnHGlobal(hImageMemory, FALSE, &pIStream) ; // 用OleLoadPicture获得IPicture接口指针 OleLoadPicture(pIStream, 0, FALSE, IID_IPicture, (LPVOID*)&(pIPicture)); // 用接口方法获得图片的宽和高 pIPicture->get_Width(&hmWidth); pIPicture->get_Height(&hmHeight); // 在指定的DC上绘出图片 pIPicture->Render(hDC,10,70,200,200,0,hmHeight,hmWidth,-hmHeight,NULL); // 释放全局内存 GlobalFree(hImageMemory); // 释放pIStream pIStream->Release(); // 释放pIPicture pIPicture->Release(); } CreateFile函数 HANDLE CreateFile( LPCTSTR lpFileName, // 指向文件名的指针 DWORD dwDesiredAccess, // 访问模式(写/读) DWORD dwShareMode, // 共享模式 LPSECURITY_ATTRIBUTES lpSecurityAttributes, // 指向安全属性的指针 DWORD dwCreationDisposition, // 如何创建 DWORD dwFlagsAndAttributes, // 文件属性 HANDLE hTemplateFile // 用于复制文件句柄 ); 参数lpFileName:要打开的文件的名字。 参数dwDesiredAccess:如果为 GENERIC_READ 表示允许对设备进行读访问;如果为 GENERIC_WRITE 表示允许对设备进行写访问(可组合使用);如果为零,表示只允许获取与一个设备有关的信息。 参数dwShareMode:零表示不共享;FILE_SHARE_READ 和/或 FILE_SHARE_WRITE 表示允许对文件进行共享访问。 参数lpSecurityAttributes:指向一个SECURITY_ATTRIBUTES结构的指针,定义了文件的安全特性(如果操作系统支持的话)。 参数dwCreationDisposition: CREATE_NEW 创建文件;如文件存在则会出错 CREATE_ALWAYS 创建文件,如文件存在则会覆盖 OPEN_EXISTING 文件必须已经存在 OPEN_ALWAYS 如文件不存在则创建它 TRUNCATE_EXISTING 将现有文件缩短为零长度 参数dwFlagsAndAttributes: FILE_ATTRIBUTE_ARCHIVE 标记归档属性 FILE_ATTRIBUTE_COMPRESSED 标记为已压缩 FILE_ATTRIBUTE_NORMAL 默认属性 FILE_ATTRIBUTE_HIDDEN 隐藏文件或目录 FILE_ATTRIBUTE_READONLY 文件为只读 FILE_ATTRIBUTE_SYSTEM 文件为系统文件 FILE_FLAG_WRITE_THROUGH 操作系统不得推迟对文件的写操作 FILE_FLAG_OVERLAPPED 允许对文件进行重叠操作 FILE_FLAG_NO_BUFFERING 禁止对文件进行缓冲处理 FILE_FLAG_RANDOM_ACCESS 针对随机访问对文件缓冲进行优化 FILE_FLAG_SEQUENTIAL_SCAN 针对连续访问对文件缓冲进行优化 FILE_FLAG_DELETE_ON_CLOSE 关闭了上一次打开的句柄后,将文件删除 参数hTemplateFile:如果不为NULL,则指定一个文件句柄。新文件将从这个文件中复制扩展属性。 GetFileSize函数 DWORD GetFileSize( HANDLE hFile, LPDWORD lpFileSizeHigh ); 参数hFile:文件句柄。 参数lpFileSizeHigh:DWORD变量的首地址,该变量用于存储FileSize的高32位,若不需获取这部分的值,该参数可以为 NULL。 返回值:FileSize的低32位。 GlobalAlloc函数 HGLOBAL GlobalAlloc( UINT uFlags, // 分配属性(方式) DWORD dwBytes // 分配的字节数 ); 参数uFlags: GMEM_FIXED 分配固定的内存,返回值是一个指针。 GMEM_MOVEABLE 分配可移动的内存,内存块在物理内存中是不可移动的,但在缺省堆中可以。返回值是该内存对象的句柄,可使用函数 GlobalLock 将该句柄转换为一个指针。 注:用GMEM_MOVEABLE方式分配的内存是可移动的,所以要用句柄标识,不能用内存地址标识。有时我们需要的是一个内存地址,就要用GlobalLock函数将句柄转换为内存地址。对于用GMEM_FIXED方式分配的内存,返回的句柄就是内存地址,可以直接当内存地址使用。 参数dwBytes: 指定要分配的字节数。若该参数为 0 且参数 uFlags 指定为 GMEM_MOVEABLE 则该函数返回一个内存对象的句柄,该内存对象被标识为discarded(可抛弃的)。 返回值:若函数调用成功,则返回一个新分配的内存对象的句柄;若函数调用失败,则返回NULL。可调用 GetLastError 以获得更多错误信息。 GlobalLock函数 LPVOID GlobalLock( HGLOBAL hMem ); 参数hMem:全局内存对象句柄。该句柄由函数GlobalAlloc或GlobalReAlloc返回。 返回值:如果函数执行成功,返回值就是内存对象的首地址,否则返回NULL。调用GetLastError可以得到更多错误信息。 ReadFile函数 BOOL ReadFile( HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped ); 参数hFile:文件的句柄。 参数lpBuffer:保存读入数据的缓冲区的首地址。 参数nNumberOfBytesToRead:要读入的字节数。 参数lpNumberOfBytesRead: DWORD类型变量的首地址,该变量用于存储实际读取的字节数。 参数lpOverlapped: 如果文件用FILE_FLAG_OVERLAPPED方式打开,那么该参数必须指向一个OVERLAPPED结构体。否则,这个参数可以设为NULL。 CreateStreamOnHGlobal函数 函数功能:从内存创建流对象。 WINOLEAPI CreateStreamOnHGlobal( HGLOBAL hGlobal, BOOL fDeleteOnRelease, LPSTREAM *ppstm ); 参数hGlobal: 由GlobalAlloc函数分配的内存句柄。该句柄必须是以GMEM_MOVEABLE方式分配的并且是nondiscardable (不可抛弃的)。 参数fDeleteOnRelease: 该参数指明内存在该对象被释放后是否也自动释放。如果该参数设定为FALSE,那么调用者必须显示的释放hGlobal。如果该参数设置为TRUE,则hGlobal最终会自动释放。 参数ppstm:IStream类型对象的首地址,该对象用于存储新创建的流对象。 OleLoadPicture 功能:从流中创建一个新的图片对象并初始化它。 STDAPI OleLoadPicture( IStream * pStream, LONG lSize, BOOL fRunmode, REFIID riid, VOID ppvObj ); 参数pStream:图片数据流指针。 参数lSize:从流中读取数据的字节数,值为0表示全部读取。 参数fRunmode:是否采用与图像初始化属性相反的属性值。 参数riid:描述ppvObj参数类型的接口标识。 参数ppvObj:图片对象指针 返回值:图片创建成功返回S_OK 函数库:olepro32.dll 头文件:olectl.h Render函数 功能:渲染图像 HRESULT Render( HDC hdc, // 设备上下文句柄 long x, long y, long cx, long cy, OLE_XPOS_HIMETRIC xSrc, OLE_YPOS_HIMETRIC ySrc, OLE_XSIZE_HIMETRIC cxSrc, OLE_YSIZE_HIMETRIC cySrc, LPCRECT prcWBounds // 指向矩形的指针,此矩形包含目的位置 ); 头文件:ocidl.h GetDC函数 功能:获取设备上下文句柄 HDC GetDC( HWND hWnd ); 注:GetDC获取的仅仅是窗口的工作区,不包含标题栏。- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图片 显示器
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【xrp****65】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【xrp****65】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【xrp****65】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【xrp****65】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文