文件名称:实例设计-led全彩显示屏单元板电路图
文件大小:259KB
文件格式:PDF
更新时间:2024-06-29 01:18:21
C++ PNG 读写 显示
四、实例设计 在设计实例前,先准备好相关的库。PNG文件的读写库为 libpng,由于 PNG 用到 LZ77 派生压缩算法,因此,编译读写库时,libpng需要连接 zlib库[4],这两个库的源代码可 在文献[3]和文献[4]中获得。下面开始讲解如何应用 VC++6.0设计 PNG图像浏览器。 第一步:建立一个名为 PngImage的多文档框架应用程序,其 View类选择继承于 CScrollView。 第二步:在应用程序 CPngImageApp的初始化函数 InitInstance()中,加入以下代码 cmdInfo.m_nShellCommand=CCommandLineInfo::FileNothing; 该代码位于 ParseCommandLine(cmdInfo)后,目的是使程序启动时,不打开新的空白 文档。同时将字符串 IDR_PNGIMATYPE 修改为 “\nPNG\nPNG\nPNG(*.png)\n.png\nPNG.Document\nPNG Document”,目的是打开文件时, 默认的文件对话框只显示后缀名为 PNG文件。 第三步:从 libpng库和 zlib库中,选择以下文件,将他们添加到 PngImage 项目中。 pngconf.h, png.h, libpng.lib, cexcept.h, zlib.lib, zlib.h, zconf.h 同时,将第三节设计的 MyPNG 类也添加到项目中。 第四步:为文档类 CPngImageDoc 添加公有成员变量 MyPNG m_png, 并改写 OnOpenDocument函数,具体如下: BOOL CPngImageDoc::OnOpenDocument(LPCTSTR lpszPathName) { if (!CDocument::OnOpenDocument(lpszPathName)) return FALSE; BOOL ret=m_png.PngLoadImage((const char *)lpszPathName); return ret; } 重写文档类的虚函数 OnSaveDocument,具体如下: BOOL CPngImageDoc::OnSaveDocument(LPCTSTR lpszPathName) { BOOL ret=m_png.PngSaveImage((const char *)lpszPathName); if (ret==TRUE) AfxMessageBox("保存成功!"); else AfxMessageBox("保存失败!"); return ret; } 同时,为菜单 IDR_PNGIMATYPE 中的“另存为”添加消息映射,具体代码如下: void CPngImageDoc::OnFileSaveAs() { BOOL ret; static char BASED_CODE szSaveFilter[]="PNG(*.png)|*.png||"; //过滤文 件 //创建文件保存对话框 CFileDialog FileDlg(FALSE,"*.png",NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szSaveFilter); if (FileDlg.DoModal()==IDOK) //如果选择确定按钮,则保存 { ret=m_png.PngSaveImage((const char *)FileDlg.m_ofn.lpstrFile); if (ret==TRUE) AfxMessageBox("另存成功!"); else AfxMessageBox("另存失败!"); } }