图像处理系统详细设计说明书.docx

上传人:b****5 文档编号:5716464 上传时间:2022-12-31 格式:DOCX 页数:18 大小:398.60KB
下载 相关 举报
图像处理系统详细设计说明书.docx_第1页
第1页 / 共18页
图像处理系统详细设计说明书.docx_第2页
第2页 / 共18页
图像处理系统详细设计说明书.docx_第3页
第3页 / 共18页
图像处理系统详细设计说明书.docx_第4页
第4页 / 共18页
图像处理系统详细设计说明书.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

图像处理系统详细设计说明书.docx

《图像处理系统详细设计说明书.docx》由会员分享,可在线阅读,更多相关《图像处理系统详细设计说明书.docx(18页珍藏版)》请在冰豆网上搜索。

图像处理系统详细设计说明书.docx

图像处理系统详细设计说明书

案卷号

日期

 

图像处理系统

详细设计说明书

 

作者:

YOUNGREGINGROUP团队

完成日期:

2016.8.24

签收人:

签收日期:

 

修改情况记录:

版本号

修改批准人

修改人

修改日期

签收人

1.0

杨开

2016.8.23

1.1

杨开

2016.8.24

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测试计划

进入主界面

预期结果

点击图片旋转

进行操作旋转效果

点击图片缩放

进行操作缩放效果

点击水印效果

进行操作水印效果

点击照片版式

进行操作查看效果

点击退出

退出程序

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1