案卷号 日期
图像处理系统
详细设计说明书
作 者: YOUNG REGIN GROUP团队
完成日期: 2016.8。24 签 收 人: 签收日期:
修改情况记录:
版本号 1.0 1。1
修改批准人 修改人 杨开 杨开 修改日期 2016。8.23 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 图像旋转模块功能设计 ........................................................................................................... 6 3.3图像缩放模块设计 ......................................................................................错误!未定义书签。 3。4 图片水印效果模块设计 ...................................................................................................... 18 3。5 照片版式处理模块设计 ...................................................................................................... 19 3。6 流程逻辑 .................................................................................................错误!未定义书签。
4 位图数据的存储形式 ................................................ 5 条件 .................................................................. 4 6 测试计划 .................................................................. 4
1 / 24
详细设计说明书
1 引言
1。1 编写目的
本详细设计说明书主要目的是对图像管理系统的功能设计进行详尽的说明。 本说明书主要写了图像管理系统功能模块的详细设计,为后来的开发提供依据与参考.
详细设计说明书面向人员有:程序设计人员、数据库设计人员,质量检测人员。
1.2 背景
a. 项目名称:图像管理系统
b. 本项目的任务提出者:西安软件服务外包学院
开发者:YOUNG REGIN GROUP 团队
1.3 定义
本系统属于开发小型的图像处理软件,主要用于实现图像的显示与批量转换操作。
实现各种图像格式的显示. 支持图像的单一转换与批量转换。 实现位图的各种常规操作。
1.4 参考资料
《C++程序设计》,谭浩强,清华大学出版社;
2 / 24
详细设计说明书
《Visual C++项目开发案例全程实录》,梁水,李伟明著,清华大学出版社。
2 程序系统的结构
图像处理模块 主窗体 批量转换与处理打开位图 位JG图位位图图 图PI像图图像像 转EF浮转转反旋 换G转雕换换色转 成转换成为 效处J换成果 GP理 P成位IN E位图 F G G 图 退出系统 PSD文件管理照片处理位图转换成GIF 图像锐化处理 水印效果批量处理 PSD文件浏览 PSD文件批量转换 水印效果批量处理 这是“图像管理系统”的整体系统结构图。
3 / 24
详细设计说明书
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,\"水印批量处理\");
4 / 24
详细设计说明书
m_wndToolBar。SetButtonText(9,”PSD文件浏览”); m_wndToolBar.SetButtonText(10,”PSD批量转换\"); m_wndToolBar。SetButtonText(11,\"照片版式处理”); 设置状态栏,关联图标资源:
UINT nID; //控制状态栏里面的分栏
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));
5 / 24
详细设计说明书
3。2 图像旋转模块功能设计
1。添加一个对话框类,类名为CImageRota。窗口如下:
2.向对话框中添加按钮、文本框、单选按钮、滑块、图片控件。 3.设置主要控件属性,如下表所示:
4。处理…事件:
void CImageRota::OnBtLoad() {
// TODO: Add your control notification handler code here
6 / 24
详细设计说明书
CFileDialog flDlg(TRUE,\"\”,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,\"位图文件|*.bmp||\); if (flDlg。DoModal()==IDOK) {
CString csFileName = flDlg.GetPathName(); m_SrcFile = flDlg。GetPathName();
m_BmpName。SetWindowText(csFileName); if (m_hBmp != NULL) { }
m_hBmp = (HBITMAP)LoadImage(NULL,csFileName,
DeleteObject(m_hBmp); m_hBmp = NULL;
IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
if (m_hBmp) { } CFile file;
file.Open(csFileName,CFile::modeRead); file.Read(
&
m_bmFileHeader
7 / 24
m_Image.SetBitmap(m_hBmp); m_bLoaded = TRUE;
,sizeof
详细设计说明书
(BITMAPFILEHEADER));
file。Read(&m_bmInfoHeader,sizeof(BITMAPINFOHEADER)); int szPalette = 0;
if (m_bmInfoHeader.biBitCount != 24) { }
if (m_bmInfoHeader.biSizeImage == 0) {
int externWidth;
//计算源位图每行使用的字节数
externWidth = m_bmInfoHeader.biWidth * 3; if(externWidth % 4 != 0)
externWidth = 4 - externWidth % 4; file。Close();
MessageBox(”请选择真彩色位图!”,\"提示”); return;
else
externWidth = 0;
m_bmInfoHeader.biSizeImage = m_bmInfoHeader.biHeight
*(m_bmInfoHeader。biWidth*3 +externWidth);
8 / 24
}
详细设计说明书
int nBmpData = m_bmInfoHeader.biSizeImage; if (m_pBmpData != NULL) { delete []m_pBmpData; m_pBmpData = NULL;
}
m_pBmpData = new BYTE[nBmpData];
file。ReadHuge(m_pBmpData,nBmpData); file.Close();
int sizeofbuffer = m_bmInfoHeader.biWidth m_bmInfoHeader.biHeight * 4; int externWidth;
externWidth = m_bmInfoHeader.biWidth * 3; if(externWidth % 4 != 0)
externWidth = 4 - externWidth % 4;
else
externWidth = 0;
int k = 0;
BYTE* m_pImageTempBuffer = new BYTE[sizeofbuffer]; 9 / 24
*
详细设计说明书
3)
{
m_pImageTempBuffer[k]
=
m_pBmpData//blue
for (int n = m_bmInfoHeader。biHeight - 1; n >= 0; n——) {
for (UINT m = 0; m < m_bmInfoHeader。biWidth * 3; m +=
[n*(m_bmInfoHeader.biWidth*3+externWidth)+m];
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
delete []m_pImageTempBuffer;
10 / 24
}
}
m_pImageTempBuffer[k+3] = 255; k += 4;
delete []m_pBmpData;
m_pBmpData = new BYTE[sizeofbuffer];
memcpy(m_pBmpData, m_pImageTempBuffer, sizeofbuffer);
详细设计说明书
//设置滚动范围
CRect bmpRC,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.处理旋转按钮事件
void CImageRota::OnBtRotate()
11 / 24
详细设计说明书
{
// TODO: Add your control notification handler code here if (m_bLoaded) {
//确定旋转方式 CButton*
pButton
=
(CButton*)GetDlgItem
(IDC_FIXDEGREE);
int nState = 0; int nDegree = 0; if (pButton != NULL) { }
if (nState) {
for (int nID = IDC_ROTATE45; nID <= IDC_ROTATE270;
//预定角度
nState = pButton—〉GetCheck();
nID++)
{
pButton = (CButton*)GetDlgItem(nID); if (pButton != NULL) {
nState = pButton—>GetCheck();
12 / 24
详细设计说明书
}
}
if (nState) { }
CString csText;
pButton—〉GetWindowText(csText); int nPos = csText.Find(\"°”); nDegree = atoi(csText。Left(nPos)); break;
}
else { }
//固定角度
UpdateData(FALSE); nDegree = m_nDegree;
//确定旋转角度
RotationImage(&m_bmInfoHeader,nDegree);
BYTE byByteAlign ; //位图行字节对齐 UINT outHeight = m_bmInfoHeader。biHeight; UINT outWidth = m_bmInfoHeader.biWidth;
13 / 24
详细设计说明书
BYTE* pBmpData = new BYTE [m_bmInfoHeader。
biSizeImage];
BYTE * pListData =m_pBmpData+((DWORD)outHeight-1)*memset(pBmpData,0,m_bmInfoHeader.biSizeImage);
outWidth*4;
BYTE byZeroData = 0;
BYTE* pTmpData = pBmpData; for (int y=0 ;y〈outHeight;y++) {
for (int x=0;x〈outWidth;x++) {
memcpy(pTmpData,pListData,3); pTmpData += 3; pListData += 4;
14 / 24
if (outWidth %4 != 0)
byByteAlign = 4- ((outWidth*3L) % 4);
else
byByteAlign = 0;
详细设计说明书
}
for (int i=0; i pListData —= 2L*outWidth*4; } CDC *pDC = m_Image.GetDC(); BITMAPINFO bInfo; bInfo.bmiHeader = m_bmInfoHeader; HBITMAP hBmp = SetBitmap(CreateDIBitmap(pDC->m_hDC,m_bmInfoHeader,CBM_INIT,pBmpData,DIB_RGB_COLORS)); if (hBmp != NULL) { ::DeleteObject(hBmp); } delete [] pBmpData; 15 / 24 m_Image & bInfo 。& , 详细设计说明书 m_ImagePanel.SetScrollRange(SB_VERT,0,bmpRC.Heightm_ImagePanel.OnHScroll(SB_LEFT, 1, NULL); m_ImagePanel。OnVScroll(SB_LEFT, 1, NULL); //设置滚动范围 CRect bmpRC,wndRC; m_ImagePanel.GetClientRect(wndRC); m_Image.GetClientRect(bmpRC); ()-wndRC.Height()); m_ImagePanel.SetScrollRange(SB_HORZ,0,bmpRC.Width()-wndRC .Width()); } } 8。处理保存按钮事件 3。3 图像缩放模块设计 1.新建一个对话框类,类名为CStretchImage,界面如下: 16 / 24 详细设计说明书 2.向对话框中添加按钮、静态文本、群组框、滑块、复选框、图片等控件。 3.设置控件属性如下: 4.处理…、缩放、保存按钮事件. 17 / 24 详细设计说明书 3。4 图片水印效果模块设计 1。实现水印效果主要代码为: 2.创建一个对话框类,类名为CImageWater。 3.向对话框中添加按钮、静态文本、群组框、滑块、复选框、图片等控件。界面如下: 4.设置控件属性如下: 18 / 24 详细设计说明书 5.处理…、缩放、保存按钮事件。 3。5 照片版式处理模块设计 1.创建一个对话框类,类名为CPhotoHandle。 2.向对话框中添加按钮、静态文本、群组框、滑块、复选框、图片等控件。界面如下: 3.设置控件属性如下: 19 / 24 详细设计说明书 4.处理…、缩放、保存按钮事件. 3。5 PSD文件浏览模块设计 1。创建一个对话框类,类名为CPsdBrowse。 2。向对话框中添加按钮、静态文本、群组框、滑块、复选框、图片等控件。界面如下: 3.设置控件属性如下: 20 / 24 详细设计说明书 4。处理…、缩放、保存按钮事件。 4 位图数据的存储形式 在进行图像处理时,一个首要的问题是实现对位图数据的直接操作。位图主要由四部分组成,分别为位图文件头、位图信息头、调色板和实际的位图数据如下: , 其中,位图文件头对应的结构为BITMAPFILEHEADER,共占用14个字节,定义如下: 21 / 24 详细设计说明书 位图信息头对应的结构为BITMAPINFOHEADER,共占用40个字节,定义如下: 5 条件 1.位图数据每行的字节数必须是4的整数倍。 2.位图数据是从下向上存储的. 3。对于真彩图来说,每一行数据是按照BRG颜色顺序排列的。 6 测试计划 22 / 24 详细设计说明书 进入主界面 点击图片旋转 点击图片缩放 点击水印效果 点击照片版式 点击退出 预期结果 进行操作旋转效果 进行操作缩放效果 进行操作水印效果 进行操作查看效果 退出程序 23 / 24 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- sarr.cn 版权所有 赣ICP备2024042794号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务