图像处理系统详细设计说明书汇编.docx
- 文档编号:10554021
- 上传时间:2023-02-21
- 格式:DOCX
- 页数:25
- 大小:420.63KB
图像处理系统详细设计说明书汇编.docx
《图像处理系统详细设计说明书汇编.docx》由会员分享,可在线阅读,更多相关《图像处理系统详细设计说明书汇编.docx(25页珍藏版)》请在冰豆网上搜索。
图像处理系统详细设计说明书汇编
案卷号
日期
图像处理系统
详细设计说明书
作者:
YOUNGREGINGROUP团队
完成日期:
2016.8.24
签收人:
签收日期:
修改情况记录:
版本号
修改批准人
修改人
修改日期
签收人
1.0
杨开
2016.8.23
1.1
杨开
2016.8.24
目录
1引言2
1.1编写目的2
1.2背景2
1.3定义2
1.4参考资料2
2程序系统的结构3
3系统登陆设计说明4
3.1主窗口设计4
3.2图像旋转模块功能设计4
3.3图像缩放模块设计4
3.4图片水印效果模块设计5
3.5照片版式处理模块设计5
3.6流程逻辑6
4位图数据的存储形式
5限制条件4
6测试计划4
1引言
1.1编写目的
本详细设计说明书主要目的是对图像管理系统的功能设计进行详尽的说明。
本说明书主要写了图像管理系统功能模块的详细设计,为后来的开发提供依据与参考。
详细设计说明书面向人员有:
程序设计人员、数据库设计人员,质量检测人员。
1.2背景
a.项目名称:
图像管理系统
b.本项目的任务提出者:
西安软件服务外包学院
开发者:
YOUNGREGINGROUP团队
1.3定义
本系统属于开发小型的图像处理软件,主要用于实现图像的显示与批量转换操作。
实现各种图像格式的显示。
支持图像的单一转换与批量转换。
实现位图的各种常规操作。
1.4参考资料
《C++程序设计》,谭浩强,清华大学出版社;
《VisualC++项目开发案例全程实录》,梁水,李伟明著,清华大学出版社。
2程序系统的结构
这是“图像管理系统”的整体系统结构图。
3系统整体及模块显示设计说明
3.1主窗口设计
在这个系统里,主要实现用户登录进入系统后可以查询和添加相关信息。
工作区菜单代码:
m_wndToolBar.GetToolBarCtrl().SetImageList(&m_ImageList);
m_wndToolBar.SetButtonText(0,"锐化处理");
m_wndToolBar.SetButtonText(1,"反色处理");
m_wndToolBar.SetButtonText(2,"图像旋转");
m_wndToolBar.SetButtonText(3,"图像平移");
m_wndToolBar.SetButtonText(4,"图像缩放");
m_wndToolBar.SetButtonText(5,"水印效果");
m_wndToolBar.SetButtonText(6,"位图转换JPEG");
m_wndToolBar.SetButtonText(7,"JPEG转换位图");
m_wndToolBar.SetButtonText(8,"水印批量处理");
m_wndToolBar.SetButtonText(9,"PSD文件浏览");
m_wndToolBar.SetButtonText(10,"PSD批量转换");
m_wndToolBar.SetButtonText(11,"照片版式处理");
设置状态栏,关联图标资源:
UINTnID;//控制状态栏里面的分栏
m_wndStatusBar.SetPaneInfo(0,nID,SBPS_STRETCH|SBPS_NOBORDERS,100);//返回值存nID中
m_wndStatusBar.SetPaneText(0,"就绪");
m_wndStatusBar.SetPaneInfo(1,nID,SBPS_NORMAL,100);
m_wndStatusBar.SetPaneText(1,"大写");
m_wndStatusBar.SetPaneInfo(2,nID,SBPS_POPOUT,100);
m_wndStatusBar.SetPaneText(2,"数字");
//加载图像资源
m_ImageList.Create(32,32,ILC_COLOR32|ILC_MASK,1,1);
m_ImageList.Add(:
:
AfxGetApp()->LoadIcon(IDI_ICON3));
m_ImageList.Add(:
:
AfxGetApp()->LoadIcon(IDI_ICON1));
m_ImageList.Add(:
:
AfxGetApp()->LoadIcon(IDI_ICON2));
m_ImageList.Add(:
:
AfxGetApp()->LoadIcon(IDI_ICON4));
m_ImageList.Add(:
:
AfxGetApp()->LoadIcon(IDI_ICON5));
m_ImageList.Add(:
:
AfxGetApp()->LoadIcon(IDI_ICON6));
m_ImageList.Add(:
:
AfxGetApp()->LoadIcon(IDI_ICON7));
m_ImageList.Add(:
:
AfxGetApp()->LoadIcon(IDI_ICON8));
m_ImageList.Add(:
:
AfxGetApp()->LoadIcon(IDI_ICON9));
m_ImageList.Add(:
:
AfxGetApp()->LoadIcon(IDI_ICON10));
m_ImageList.Add(:
:
AfxGetApp()->LoadIcon(IDI_ICON11));
m_ImageList.Add(:
:
AfxGetApp()->LoadIcon(IDI_ICON12));
3.2图像旋转模块功能设计
1.添加一个对话框类,类名为CImageRota。
窗口如下:
2.向对话框中添加按钮、文本框、单选按钮、滑块、图片控件。
3.设置主要控件属性,如下表所示:
4.处理…事件:
voidCImageRota:
:
OnBtLoad()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CFileDialogflDlg(TRUE,"","",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"位图文件|*.bmp||",this);
if(flDlg.DoModal()==IDOK)
{
CStringcsFileName=flDlg.GetPathName();
m_SrcFile=flDlg.GetPathName();
m_BmpName.SetWindowText(csFileName);
if(m_hBmp!
=NULL)
{
DeleteObject(m_hBmp);
m_hBmp=NULL;
}
m_hBmp=(HBITMAP)LoadImage(NULL,csFileName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
if(m_hBmp)
{
m_Image.SetBitmap(m_hBmp);
m_bLoaded=TRUE;
}
CFilefile;
file.Open(csFileName,CFile:
:
modeRead);
file.Read(&m_bmFileHeader,sizeof(BITMAPFILEHEADER));
file.Read(&m_bmInfoHeader,sizeof(BITMAPINFOHEADER));
intszPalette=0;
if(m_bmInfoHeader.biBitCount!
=24)
{
file.Close();
MessageBox("请选择真彩色位图!
","提示");
return;
}
if(m_bmInfoHeader.biSizeImage==0)
{
intexternWidth;
//计算源位图每行使用的字节数
externWidth=m_bmInfoHeader.biWidth*3;
if(externWidth%4!
=0)
externWidth=4-externWidth%4;
else
externWidth=0;
m_bmInfoHeader.biSizeImage=m_bmInfoHeader.biHeight*(m_bmInfoHeader.biWidth*3+externWidth);
}
intnBmpData=m_bmInfoHeader.biSizeImage;
if(m_pBmpData!
=NULL)
{
delete[]m_pBmpData;
m_pBmpData=NULL;
}
m_pBmpData=newBYTE[nBmpData];
file.ReadHuge(m_pBmpData,nBmpData);
file.Close();
intsizeofbuffer=m_bmInfoHeader.biWidth*m_bmInfoHeader.biHeight*4;
intexternWidth;
externWidth=m_bmInfoHeader.biWidth*3;
if(externWidth%4!
=0)
externWidth=4-externWidth%4;
else
externWidth=0;
intk=0;
BYTE*m_pImageTempBuffer=newBYTE[sizeofbuffer];
for(intn=m_bmInfoHeader.biHeight-1;n>=0;n--)
{
for(UINTm=0;m { m_pImageTempBuffer[k]=m_pBmpData[n*(m_bmInfoHeader.biWidth*3+externWidth)+m];//blue m_pImageTempBuffer[k+1]=m_pBmpData[n*(m_bmInfoHeader.biWidth*3+externWidth)+m+1];//green m_pImageTempBuffer[k+2]=m_pBmpData[n*(m_bmInfoHeader.biWidth*3+externWidth)+m+2];//red m_pImageTempBuffer[k+3]=255; k+=4; } } delete[]m_pBmpData; m_pBmpData=newBYTE[sizeofbuffer]; memcpy(m_pBmpData,m_pImageTempBuffer,sizeofbuffer); delete[]m_pImageTempBuffer; //设置滚动范围 CRectbmpRC,wndRC; m_ImagePanel.GetClientRect(wndRC);//获取面板的客户区域 m_Image.GetClientRect(bmpRC);//获取图片空间的客户区域 m_ImagePanel.OnHScroll(SB_LEFT,1,NULL); m_ImagePanel.OnVScroll(SB_LEFT,1,NULL); m_ImagePanel.SetScrollRange(SB_VERT,0,bmpRC.Height()-wndRC.Height()); m_ImagePanel.SetScrollRange(SB_HORZ,0,bmpRC.Width()-wndRC.Width()); } } 5.向对话框中添加RotateBmp方法,按指定的角度旋转。 6.向对话框中添加RotationImage方法,并调用RotateBmp方法处理图像。 7.处理旋转按钮事件 voidCImageRota: : OnBtRotate() { //TODO: Addyourcontrolnotificationhandlercodehere if(m_bLoaded) { //确定旋转方式 CButton*pButton=(CButton*)GetDlgItem(IDC_FIXDEGREE); intnState=0; intnDegree=0; if(pButton! =NULL) { nState=pButton->GetCheck(); } if(nState)//预定角度 { for(intnID=IDC_ROTATE45;nID<=IDC_ROTATE270;nID++) { pButton=(CButton*)GetDlgItem(nID); if(pButton! =NULL) { nState=pButton->GetCheck(); if(nState) { CStringcsText; pButton->GetWindowText(csText); intnPos=csText.Find("°"); nDegree=atoi(csText.Left(nPos)); break; } } } } else//固定角度 { UpdateData(FALSE); nDegree=m_nDegree; } //确定旋转角度 RotationImage(&m_bmInfoHeader,nDegree); BYTEbyByteAlign;//位图行字节对齐 UINToutHeight=m_bmInfoHeader.biHeight; UINToutWidth=m_bmInfoHeader.biWidth; BYTE*pBmpData=newBYTE[m_bmInfoHeader.biSizeImage]; memset(pBmpData,0,m_bmInfoHeader.biSizeImage); BYTE*pListData=m_pBmpData+((DWORD)outHeight-1)*outWidth*4; if(outWidth%4! =0) byByteAlign=4-((outWidth*3L)%4); else byByteAlign=0; BYTEbyZeroData=0; BYTE*pTmpData=pBmpData; for(inty=0;y { for(intx=0;x { memcpy(pTmpData,pListData,3); pTmpData+=3; pListData+=4; } for(inti=0;i { memcpy(pTmpData,&byZeroData,1); pTmpData=pTmpData+1; } pListData-=2L*outWidth*4; } CDC*pDC=m_Image.GetDC(); BITMAPINFObInfo; bInfo.bmiHeader=m_bmInfoHeader; HBITMAPhBmp=m_Image.SetBitmap(CreateDIBitmap(pDC->m_hDC,&m_bmInfoHeader,CBM_INIT,pBmpData,&bInfo,DIB_RGB_COLORS)); if(hBmp! =NULL) { : : DeleteObject(hBmp); } delete[]pBmpData; //设置滚动范围 CRectbmpRC,wndRC; m_ImagePanel.GetClientRect(wndRC); m_Image.GetClientRect(bmpRC); m_ImagePanel.OnHScroll(SB_LEFT,1,NULL); m_ImagePanel.OnVScroll(SB_LEFT,1,NULL); m_ImagePanel.SetScrollRange(SB_VERT,0,bmpRC.Height()-wndRC.Height()); m_ImagePanel.SetScrollRange(SB_HORZ,0,bmpRC.Width()-wndRC.Width()); } } 8.处理保存按钮事件 3.3图像缩放模块设计 1.新建一个对话框类,类名为CStretchImage,界面如下: 2.向对话框中添加按钮、静态文本、群组框、滑块、复选框、图片等控件。 3.设置控件属性如下: 4.处理…、缩放、保存按钮事件。 3.4图片水印效果模块设计 1.实现水印效果主要代码为: 2.创建一个对话框类,类名为CImageWater。 3.向对话框中添加按钮、静态文本、群组框、滑块、复选框、图片等控件。 界面如下: 4.设置控件属性如下: 5.处理…、缩放、保存按钮事件。 3.5照片版式处理模块设计 1.创建一个对话框类,类名为CPhotoHandle。 2.向对话框中添加按钮、静态文本、群组框、滑块、复选框、图片等控件。 界面如下: 3.设置控件属性如下: 4.处理…、缩放、保存按钮事件。 3.5PSD文件浏览模块设计 1.创建一个对话框类,类名为CPsdBrowse。 2.向对话框中添加按钮、静态文本、群组框、滑块、复选框、图片等控件。 界面如下: 3.设置控件属性如下: 4.处理…、缩放、保存按钮事件。 4位图数据的存储形式 在进行图像处理时,一个首要的问题是实现对位图数据的直接操作。 位图主要由四部分组成,分别为位图文件头、位图信息头、调色板和实际的位图数据如下: , 其中,位图文件头对应的结构为BITMAPFILEHEADER,共占用14个字节,定义如下: 位图信息头对应的结构为BITMAPINFOHEADER,共占用40个字节,定义如下: 5限制条件 1.位图数据每行的字节数必须是4的整数倍。 2.位图数据是从下向上存储的。 3.对于真彩图来说,每一行数据是按照BRG颜色顺序排列的。 6测试计划 进入主界面 预期结果 点击图片旋转 进行操作旋转效果 点击图片缩放 进行操作缩放效果 点击水印效果 进行操作水印效果 点击照片版式 进行操作查看效果 点击退出 退出程序
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图像 处理 系统 详细 设计 说明书 汇编