实验4JPEG压缩编解码的实现

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验四JPEG压缩编解码的实现

实验目的:

使学生掌握DIB文件和JPEG文件的读写过程,能够在程序中打开DIB文件或JPEG文件,可以进行DIB文件和JPEG文件之间的格式转换。

实验环境:

具有多媒体处理功能的计算安装有Windows操作系统,安装有Visual c++6.0程序设计软件。

实验要求:

学习相关理论指导,掌握相关程序设计知识;按照实验步骤要求完成程序设计任务,书写实验报告,试验报告中要求包含程序实现的主要程序代码。

实验内容和实验步骤:

1)创建基于单文档的应用程序:RWJpegExp,并支持窗口滚动

2)为项目添加CJpeg类和jpeglib2库文件

3)通过“Project/Settings…”菜单,选中Link选项卡如下设置:

4)利用ClassWaizard重载CwinApp的OnFileOpen()函数。

void CRWJpegExpApp::OnFileOpen()

{

// TODO: Add your command handler code here

CString szOpenFilter = "图象文件|*.bmp; *.dib; *.jpg; *.jpe; *.jpeg; |位图文件(*.bmp;*.dib)|*.bmp; *.dib|JPEG文件(*.jpg;*.jpe;*.jpeg)|*.jpg; *.jpe; *.jpeg|All Files (*.*)|*.*||";

CFileDialog FileDlg(TRUE, "*.bmp", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szOpenFilter);

if (FileDlg.DoModal() == IDOK)

OpenDocumentFile(FileDlg.m_ofn.lpstrFile);

}

5)利用ClassWaizard重载CRWJpegExpDoc类的的OnOpenDocument()函数。BOOL CRWJpegExpDoc::OnOpenDocument(LPCTSTR lpszPathName)

{

char drive[_MAX_DRIVE];

char dir[_MAX_DIR];

char fname[_MAX_FNAME];

char ext[_MAX_EXT];

_splitpath((LPCSTR)lpszPathName, drive, dir, fname, ext);

if (! stricmp(ext, ".jpg") ||

! stricmp(ext, ".jpe") ||

! stricmp(ext, ".jpeg") ) // JPEG file

{

CJpeg jpeg;

if (! jpeg.Load(lpszPathName))

return FALSE;

HDIB hDIB = CopyHandle(jpeg.GetDib()->GetHandle());

if (hDIB == NULL)

return FALSE;

m_pDib->Attach(hDIB);

return TRUE;

}

return CDocument::OnOpenDocument(lpszPathName);

}

上述代码,应用程序已具备读取JPEG文件、将其解码并显示的功能。

6)利用ClassWaizard为CRWJpegExpDoc类添加一个相应ID——FILE——SA VE——AS命令的消息映射函数CRWJpegExpDoc::OnFileSaveAs()函数。

void CRWJpegExpDoc::OnFileSaveAs()

{

// TODO: Add your command handler code here

CString szSaveFilter= "单色位图(*.bmp;*.dib)|*.bmp; *.dib|16色位图(*.bmp;*.dib)|*.bmp; *.dib|256色位图(*.bmp;*.dib)|*.bmp; *.dib|24位位图(*.bmp;*.dib)|*.bmp; *.dib|JPEG文件(*.jpg;*.jpe;*.jpeg)|*.jpg; *.jpe; *.jpeg|All Files (*.*)|*.*||";

CFileDialog FileDlg(FALSE, "*.bmp", NULL, OFN_HIDEREADONL Y | OFN_OVERWRITEPROMPT, szSaveFilter);

CString strPathName = GetPathName();

char drive[_MAX_DRIVE];

char dir[_MAX_DIR];

char fname[_MAX_FNAME];

char ext[_MAX_EXT];

_splitpath((LPCSTR)strPathName, drive, dir, fname, ext);

if (! stricmp(ext, ".jpg") ||

! stricmp(ext, ".jpe") ||

! stricmp(ext, ".jpeg") ) // JPEG file

FileDlg.m_ofn.nFilterIndex = 5;

else

{

switch (m_pDib->GetBitCount())

{

case 1:

FileDlg.m_ofn.nFilterIndex = 1;

相关文档
最新文档