多媒体数据库应用程序――图像的操作

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

软件学院《多媒体开发与编程》课程设计报告题目:多媒体数据库应用程序专业:软件工程2012年5月26日一、课程设计目的理解ODBC的基本原理,并且掌握基于Access2003设计简单多媒体数据库应用程序,并根据对应的数据显示相应的要求。二、课程设计内容多媒体数据库应用程序——图像的操作三、实验要求设计要求当运行该程序时,首先显示数据库的信息(已经添加的或者即时添加的)会显示基本信息,性别,年龄,学号,姓名等基本信息以及信息人的头像。然后可以在该信息基础上修改信息,修改信息删除等各项功能的操作。数据的存放利用结构体数组来实现,完成设计任务并书写课程设计报告四、设计思路基本数据库信息管理系统是一个管理数据的服务平台,它包括添加信息,修改信息,删除信息等功能。分析任务书中的要求,根据各项要求给出相应的代码完善。主要根据数据库设计的,所以,基本信息都应该在数据库中找到,图片的显示是重点,由于数据库识别的是BMP格式,以大二进制保存在数据库中,所以显示的时候应该先将图片的格式转换成BMP格式,不能直接修改图片的后缀名而进行。五、程序源代码1,为不同的成员函数之间传递数据,为CMyDB2View声明数据成员代码如下classCMyDB2View:publicCRecordView{public:CMyDB2Doc*GetDocument();HBITMAPm_hPhotoBmp;DWORDm_nFileLength;BOOLm_RecordAddNew;BOOLm_RecordModify;char*m_pBmpBuffer;}2,初始化m_pSet对象代码如下:classCMyDB2View::CMyDB2View():CRecordView(CMyDB2View::IDD){m_pSet=NULL;}3,在视图的OnInitialUpdate()函数中初始化部分成员变量代码如下:voidCMyDB2View::OnInitialUpdate(){m_pSet=&GetDocument()-m_myDB2Set;CRecordView::OnInitialUpdate();GetParentFrame()-RecalcLayout();ResizeParentToFit();CStringstrFileName=yyy.bmp;chartmpPath[_MAX_PATH+1];GetTempPath(_MAX_PATH,tmpPath);strFileName.Insert(0,tmpPath);CFileoutFile(strFileName,CFile::modeCreate|CFile::modeWrite);LPSTRbuffer=(LPSTR)GlobalLock(m_pSet-m_column5.m_hData);outFile.WriteHuge(buffer,m_pSet-m_column5.m_dwDataLength);GlobalUnlock(m_pSet-m_column5.m_hData);outFile.Close();LoadBmpFile(strFileName);m_hPhotoBmp=TransToBmp();m_Butt_Add.EnableWindow(TRUE);m_Butt_Edit.EnableWindow(TRUE);m_Butt_Del.EnableWindow(TRUE);m_Butt_QR.EnableWindow(FALSE);m_Butt_Pic.EnableWindow(FALSE);m_Butt_CX.EnableWindow(FALSE);m_RecordAddNew=FALSE;m_RecordModify=FALSE;}4,加载指定图像文件代码如下:BOOLCMyDB2View::LoadBmpFile(constchar*pBmpPathname){CFilefile;if(!file.Open(pBmpPathname,CFile::modeRead))returnFALSE;m_nFileLength=file.GetLength();m_pBmpBuffer=newchar[m_nFileLength+1];if(!m_pBmpBuffer)returnFALSE;if(file.ReadHuge(m_pBmpBuffer,m_nFileLength)!=m_nFileLength)returnFALSE;returnTRUE;}5,函数TransToBmp()生成位图对象代码如下:HBITMAPCMyDB2View::TransToBmp(){HBITMAPhBmp;LPSTRhDIB,lpBuffer=m_pBmpBuffer;LPVOIDlpDIBBits;BITMAPFILEHEADERbmfHeader;DWORDbmfHeaderLen;//获得位图的头信息bmfHeaderLen=sizeof(bmfHeader);strncpy((LPSTR)&bmfHeader,(LPSTR)lpBuffer,bmfHeaderLen);//根据获得的信息头判断是否是位图if(bmfHeader.bfType!=(*(WORD*)BM))returnNULL;//获取位图数据hDIB=lpBuffer+bmfHeaderLen;BITMAPINFOHEADER&bmiHeader=*(LPBITMAPINFOHEADER)hDIB;BITMAPINFO&bmInfo=*(LPBITMAPINFO)hDIB;lpDIBBits=(lpBuffer)+((BITMAPFILEHEADER*)lpBuffer)-bfOffBits;//创建位图CClientDCdc(this);hBmp=CreateDIBitmap(dc.m_hDC,&bmiHeader,CBM_INIT,lpDIBBits,&bmInfo,DIB_RGB_COLORS);returnhBmp;}6,“添加”事件的代码如下:voidCMyDB2View::OnAdd(){EnableEditCom(true);IniData();m_Butt_Add.EnableWindow(FALSE);m_Butt_Edit.EnableWindow(FALSE);m_Butt_Del.EnableWindow(FALSE);m_Butt_QR.EnableWindow(FALSE);m_Butt_CX.EnableWindow(TRUE);m_Butt_Pic.EnableWindow(TRUE);m_pSet-CanAppend();m_pSet-AddNew();//m_pSet-GetDefaultSQL();//m_pSet-DoFieldExchange(FALSE);UpdateData(FALSE);m_RecordAddNew=TRUE;}7,编辑框控件代码如下:voidCMyDB2View::EnableEditCom(boolFlag){m_XH.EnableWindow(Flag);m_XM.EnableWindow(Flag);m_NL.EnableWindow(Flag);m_XB.EnableWindow(Flag);}8,InitData()用于初始化空间数据代码如下:voidCMyDB2View::IniData(){m_XH.SetWindowText();m_XM.SetWindowText();m_NL.SetWindowText();m_XB.SetCurSel(-1);ClearPhoto();}9,ClearPhoto()函数代码如下:voidCMyDB2View::ClearPhoto(){if(m_hPhotoBmp){DeleteObject(m_hPhotoBmp);m_hPhotoBmp=NULL;Invalidate();}if(m_pBmpBuffer){deletem_pBmpBuffer;m_pBmpBuffer=NULL;}}10,几个按钮的OnChange()事件的相应代码:voidCMyDB2View::OnChangeEditXh(){m_Butt_QR.EnableWindow(TRUE);}voidCMyDB2View::OnChangeEditXm(){m_Butt_QR.EnableWindow(TRUE);}voidCMyDB2View::OnChangeEditNl(){m_Butt_QR.EnableWindow(TRUE);}voidCMyDB2View::OnSelchangeComboXb(){m_Butt_QR.EnableWindow(TRUE);}11,浏览照片的响应函数代码如下:voidCMyDB2View::OnBUTTONPic(){staticcharBASED_CODEszFilter[]=BMPFiles(*.bmp)|*.bmp||;CFileDialogdlg(TRUE,BMP,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFilter);if(dlg.DoModal()==IDOK){CStringpathname=dlg.GetPathName();ClearPhoto();LoadBmpFile(pathname);m_hPhotoBmp=TransToBmp();m_Butt_QR.EnableWindow(TRUE);Invalidate();}}视图的OnPaint()函数代码如下:voidCMyDB2View::OnPaint(){CPaintDCdc(this);if(!m_hPhotoBmp)return;CWnd*hwnd=GetDlgItem(IDC_Picture);RECTrect;hwnd-GetClientRect(&rect);HBITMAPOldBitmap;CDCMemDC;MemDC.CreateCompatibleDC(hwnd-GetDC());OldBitmap=(HBITMAP)MemDC.SelectObject(m_hPhotoBmp);BITMAPbm;GetObject(m_hPhotoBmp,sizeof(BITMAP),&bm);hwnd-GetDC()-StretchBlt(rect.left,rect.top,rect.right,rect.bottom,&MemDC,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);MemDC.SelectObject(OldBitmap);}12,修改事件函数的响应代码如下:voidCMyDB2View::OnEdit(){EnableEditCom(true);m_Butt_Add.EnableWindow(FALSE);m_Butt_Edit.EnableWindow(FALSE);m_Butt_Del.EnableWindow(FALSE);m_Butt_QR.EnableWindow(FALSE);m_Butt_Pic.EnableWindow(TRUE);m_Butt_CX.EnableWindow(TRUE);m_RecordModify=TRUE;}13,确认事件响应代码如下:voidCMyDB2View::OnButtonQr(){UpdateData(TRUE);m_pSet-m_column5.m_dwDataLength=m_nFileLength;m_pSet-m_column5.m_hData=m_pBmpBuffer;m_pSet-SetFieldDirty(&m_pSet-m_column5);m_pSet-SetFieldNull(&m_pSet-m_column5,FALSE);if(m_RecordAddNew){m_pSet-Update()

1 / 17
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功