多媒体编程课程设计.docx
《多媒体编程课程设计.docx》由会员分享,可在线阅读,更多相关《多媒体编程课程设计.docx(78页珍藏版)》请在冰豆网上搜索。
多媒体编程课程设计
南京工程学院
多媒体编程基础课程
综合作业说明书
题目多媒体处理综合应用设计
班级
学生姓名刘土豪
学号*******
2013年06月07日
一、程序功能与设计思路
设计目标与具有的功能:
必须含有文字处理、绘图、图像、音频视频四部分内容各3种以上功能,界面及应用方法自己根据软件的特色综合考虑,每位同学必须自己设计一个动画标志,放在【帮助】对话框中,或者窗口界面上
设计思路:
1)图形处理:
Ø可以选择直线,矩形,椭圆,涂鸦进行绘画
Ø可以选择线的形状:
实线,虚线,点线
Ø可以改变线条的颜色
Ø可以改变线条的宽度
Ø可以进行多边形填充颜色并可以改变颜色
2)图片处理:
Ø可以打开BMP格式的图片
Ø可以进行锐化,浮雕,反色等图片处理效果
Ø可以显示鼠标在图片上坐标处的颜色值和颜色
3)文字处理:
Ø实现至少少三种文字特效,比如:
文字渐变,旋转体,3D,文字倾斜,下划线,空心字等
4)音乐播放器:
Ø可以打开mp3,wma,wvi格式的歌曲
Ø可以控制音乐的播放、暂停、停止
Ø可以指定播放当前音乐的上一个或下一个音乐
Ø在列表中随意选择要播放的音乐
Ø在播放时,可以获取并显示当前播放音乐的信息
Ø可以调节音乐的音量
5)视频播放器:
Ø可以打开MP3,WMA,WMV,AVI,RM,RMVB,FLV,MP4等格式
Ø在列表中随意选择要播放的媒体文件
Ø控制媒体文件的播放、暂停、停止、快进、快退
Ø指定播放当前文件的上一个或下一个媒体文件
Ø在播放时,可以获取并显示当前播放媒体的文件信息
Ø播放模式可以进行进行选择
Ø可以对播放列表或列表中的选项进行删除操作
二、相关原理知识介绍
(1)图形处理:
画笔和画刷是绘图中最基本的元素
1.画笔(Pen):
用于在设备环境中绘制直线,曲线和多边形边框。
创建画笔:
(1)CPen();
(2)CPen(intnPenStyle,intnWidth,COLORREFcrColor);
nPenStyle:
画笔的样式PS_SOLID创建一个实线画笔,PS_DASH创建一个虚线画笔,PS_DOT创建一个点线画笔
nWidth:
画笔的宽度
crColor:
画笔的颜色(颜色用RGB值来描述)
2.画刷(CBrush):
常用于填充个区域诸如多边形,椭圆和路径等图形内部区域
创建画刷:
(1)CreateSolidBrush用指定的颜色初始化画刷
(2)CreateHatchBrush用指定的阴影线初始化画刷。
(3)CreateBrushIndirect用结构LOGBRUSH中指定的风格、颜色和模式初始化画刷。
3.画直线:
LineTo(intx,inty)
画椭圆:
Ellipse(intx1,inty1,intx2,inty2)
画矩形:
Rectangle(intx1,inty1,intx2,inty2)//x1,y1为边界矩形左上角的坐标,x2,y2为边界矩形右下角的坐标
(2)图片处理:
BitBlt,用于从源设备中复制位图到目标设备中,
BOOLBitBlt(HDChdcDest,intnXDest,intnYDest,intnWidth,intnHeight,HDChdcSrc,intnXSrc,intnYSrc,DWORDdwRop)
hdcDest:
指向目标设备环境的句柄。
nXDest:
指定目标矩形区域左上角的X轴逻辑坐标。
nYDest:
指定目标矩形区域左上角的Y轴逻辑坐标。
nWidth:
指定源和目标矩形区域的逻辑宽度。
nHeight:
指定源和目标矩形区域的逻辑高度。
hdcSrc:
指向源设备环境的句柄。
nXSrc:
指定源矩形区域左上角的X轴逻辑坐标。
nYSrc:
指定源矩形区域左上角的Y轴逻辑坐标。
dwRop:
指定光栅操作代码。
这些代码将定义源矩形区域的颜色数据,如何与目标矩形区域的颜色数据组合以完成最后的颜色。
(3)文字处理:
输出文字Textout():
用当前字体在指定位置处写一个字符串
TextOut(intx,inty,Cstringstring):
文本起点的x坐标和y坐标以及要绘制的字符串
创建字体LOGFONT{}结构
(4)音频播放器:
使用VC++6.0强大的MFC、AppWizard、ClassWizard和其中的多种控件可以很方便地建立各种应用程序。
同时想要实现更高级更复杂的功能,也可以借助ActiveX控件资源,用这些现有的控件资源,可以省去自己编程的复杂过程,从而实现更高级的功能。
本次课程设计要使用VC++6.0自带的一个ActiveX控件——WindowsMediaPlayer控件,建立自己的多媒体播放器
三、界面设计和功能实现
1.主界面设计结构框架图:
2.打开VC6.0,新建MFC工程,基于对话框,名称为多媒体课设
3.向主窗口拖一个Tab控件,并调整大小使之占据2/3主窗口大小,并为Tab添加类向导,
添加IDC_TAB1的变量:
m_tab
完成后在“多媒体课设Dlg.cpp”中的OnInitDialog添加如下代码:
//Settheiconforthisdialog.Theframeworkdoesthisautomatically
//whentheapplication'smainwindowisnotadialog
SetIcon(m_hIcon,TRUE);//Setbigicon
SetIcon(m_hIcon,FALSE);//Setsmallicon
//TODO:
Addextrainitializationhere
m_tab.InsertItem(0,"图形处理");
m_tab.InsertItem(1,"图片处理");
m_tab.InsertItem(2,"文字处理");
m_tab.InsertItem(3,"音乐播放");
m_tab.InsertItem(4,"音频播放");
RECTrc;
m_tab.GetClientRect(&rc);
m_draw.Create(IDD_DRAW_DIALOG,&m_tab);
m_draw.SetWindowPos(NULL,5,20,rc.right,rc.bottom,SWP_SHOWWINDOW);
m_picture.Create(IDD_PICTURE_DIALOG,&m_tab);
m_picture.SetWindowPos(NULL,5,20,rc.right,rc.bottom,SWP_HIDEWINDOW);
m_music.Create(IDD_MUSIC_DIALOG,&m_tab);
m_music.SetWindowPos(NULL,5,20,rc.right,rc.bottom,SWP_HIDEWINDOW);
m_movie.Create(IDD_MOVIE_DIALOG,&m_tab);
m_movie.SetWindowPos(NULL,5,20,rc.right,rc.bottom,SWP_HIDEWINDOW);
m_word.Create(IDD_WORD_DIALOG,&m_tab);
m_word.SetWindowPos(NULL,5,20,rc.right,rc.bottom,SWP_HIDEWINDOW);
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol
在添加类向导OnSelchangeTab1()中添加代码:
voidCMyDlg:
:
OnSelchangeTab1(NMHDR*pNMHDR,LRESULT*pResult)
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CRectrc;
m_tab.GetClientRect(&rc);
switch(m_tab.GetCurSel())
{
case0:
m_movie.SetWindowPos(NULL,5,20,rc.right,rc.bottom,SWP_HIDEWINDOW);
m_music.SetWindowPos(NULL,5,20,rc.right,rc.bottom,SWP_HIDEWINDOW);
m_word.SetWindowPos(NULL,5,20,rc.right,rc.bottom,SWP_HIDEWINDOW);
m_picture.SetWindowPos(NULL,5,20,rc.right,rc.bottom,SWP_HIDEWINDOW);
m_draw.SetWindowPos(NULL,5,20,rc.right,rc.bottom,SWP_SHOWWINDOW);
break;
case1:
m_movie.SetWindowPos(NULL,5,20,rc.right,rc.bottom,SWP_HIDEWINDOW);
m_music.SetWindowPos(NULL,5,20,rc.right,rc.bottom,SWP_HIDEWINDOW);
m_word.SetWindowPos(NULL,5,20,rc.right,rc.bottom,SWP_HIDEWINDOW);
m_draw.SetWindowPos(NULL,5,20,rc.right,rc.bottom,SWP_HIDEWINDOW);
m_picture.SetWindowPos(NULL,5,20,rc.right,rc.bottom,SWP_SHOWWINDOW);
break;
case2:
m_movie.SetWindowPos(NULL,5,20,rc.right,rc.bottom,SWP_HIDEWINDOW);
m_music.SetWindowPos(NULL,5,20,rc.right,rc.bottom,SWP_HIDEWINDOW);
m_picture.SetWindowPos(NULL,5,20,rc.right,rc.bottom,SWP_HIDEWINDOW);
m_draw.SetWindowPos(NULL,5,20,rc.right,rc.bottom,SWP_HIDEWINDOW);
m_word.SetWindowPos(NULL,5,20,rc.right,rc.bottom,SWP_SHOWWINDOW);
break;
case3:
m_movie.SetWindowPos(NULL,5,20,rc.right,rc.bottom,SWP_HIDEWINDOW);
m_word.SetWindowPos(NULL,5,20,rc.right,rc.bottom,SWP_HIDEWINDOW);
m_picture.SetWindowPos(NULL,5,20,rc.right,rc.bottom,SWP_HIDEWINDOW);
m_draw.SetWindowPos(NULL,5,20,rc.right,rc.bottom,SWP_HIDEWINDOW);
m_music.SetWindowPos(NULL,5,20,rc.right,rc.bottom,SWP_SHOWWINDOW);
break;
case4:
m_music.SetWindowPos(NULL,5,20,rc.right,rc.bottom,SWP_HIDEWINDOW);
m_word.SetWindowPos(NULL,5,20,rc.right,rc.bottom,SWP_HIDEWINDOW);
m_picture.SetWindowPos(NULL,5,20,rc.right,rc.bottom,SWP_HIDEWINDOW);
m_draw.SetWindowPos(NULL,5,20,rc.right,rc.bottom,SWP_HIDEWINDOW);
m_movie.SetWindowPos(NULL,5,20,rc.right,rc.bottom,SWP_SHOWWINDOW);
break;
}
*pResult=0;
}
4.本作业分为5个部分:
图形处理,图片处理,文字处理,音乐播放,音频播放
(1)分别建立5个资源:
选择菜单栏的“插入”,选择窗体,窗体名称分别为:
DRAW,Picture,Word,MUSIC,MOVIE
并将窗体的样式改为如下:
(2)分别为5个窗体创建变量名称:
在“多媒课设Dlg.h”中添加变量:
另外将5个部分的头文件全部加到“多媒体课设Dlg.h”中,才能调用哦
(3)插入背景图片:
菜单栏选择“插入”,选择“资源”,选择“Bitmap”,点击“引入”,选择BMP格式的图片
名称为IDB_BITMAP4,在OnPaint()添加如下代码:
else
{
//CDialog:
:
OnPaint();
CPaintDCdc(this);
CRectrect;
GetClientRect(&rect);
CDCdcMem;
dcMem.CreateCompatibleDC(&dc);
CBitmapbmpBackground;
bmpBackground.LoadBitmap(IDB_BITMAP4);
BITMAPbitmap;
bmpBackground.GetBitmap(&bitmap);
CBitmap*pbmpOld=dcMem.SelectObject(&bmpBackground);
dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);
}
二.各个板块设计:
(1)图形处理:
图形处理设计框架图:
设计如图:
插件名称
ID
直线
IDC_Line
矩形
IDC_Rect
椭圆
IDC_Elipse
涂鸦
IDC_Tuya
线型
IDC_Linestyle
线宽
IDC_Linewidth
画笔颜色
IDC_Pencolor
填充颜色
IDC_Brushcolor
清空面板
IDC_clear
绘画区域
IDC_Show
功能实现:
在Draw.h添加变量:
设置默认值:
DRAW:
:
DRAW(CWnd*pParent)
:
CDialog(DRAW:
:
IDD,pParent)
{
//{{AFX_DATA_INIT(DRAW)
m_linewidth=0;
f_move=0;
color_pen=RGB(255,0,0);
color_brush=RGB(255,255,255);
Hcursor=AfxGetApp()->LoadStandardCursor(IDC_CROSS);
//}}AFX_DATA_INIT
}
在OnInitDialog()中设置线型的选择和默认值,代码如下:
BOOLDRAW:
:
OnInitDialog()
{
CDialog:
:
OnInitDialog();
//TODO:
Addextrainitializationhere
CheckRadioButton(IDC_Line,IDC_Tuya,IDC_Rect);//默认选择画矩形
m_linestyle.AddString("实线");
m_linestyle.AddString("虚线");
m_linestyle.AddString("点线");
m_linestyle.SetCurSel(0);//默认画实线
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol
//EXCEPTION:
OCXPropertyPagesshouldreturnFALSE
}
在OnPaint添加如下代码:
voidDRAW:
:
OnPaint()
{
CPaintDCdc(this);//devicecontextforpainting
//TODO:
Addyourmessagehandlercodehere
UpdateData(TRUE);
CRectrect;
GetDlgItem(IDC_SHOW)->GetWindowRect(&rect);
ScreenToClient(&rect);
CBrushbrush(RGB(255,255,255));
dc.FillRect(CRect(rect.left,rect.top+8,rect.right,rect.bottom),&brush);
//DonotcallCDialog:
:
OnPaint()forpaintingmessages
}
添加LButtonDown函数响应:
voidDRAW:
:
OnLButtonDown(UINTnFlags,CPointpoint)
{
//TODO:
Addyourmessagehandlercodehereand/orcalldefault
UpdateData(TRUE);
m_BeginPoint=point;
m_EndPoint=point;
SetCapture();//执行这条语句后,当鼠标移动到本窗口以外时,鼠标消息仍然被发送给本窗口;
f_move=1;
CRectrect;
GetClientRect(&rect);
ClientToScreen(&rect);
CDialog:
:
OnLButtonDown(nFlags,point);
}
添加LButtonUp函数响应:
voidDRAW:
:
OnLButtonUp(UINTnFlags,CPointpoint)
{
//TODO:
Addyourmessagehandlercodehereand/orcalldefault
CDC*dc=GetDC();
if(f_move)
{
:
:
ReleaseCapture();//停止捕获鼠标消息
draw(point,1);
f_move=0;
}
CDialog:
:
OnLButtonUp(nFlags,point);
}
添加MouseMove函数响应:
voidDRAW:
:
OnMouseMove(UINTnFlags,CPointpoint)
{
//TODO:
Addyourmessagehandlercodehereand/orcalldefault
draw(point,0);
CDialog:
:
OnMouseMove(nFlags,point);
}
给“线型按钮”添加CBN_SELCHANCE响应函数,代码如下:
voidDRAW:
:
OnSelchangeLinestyle()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CStringstr;
m_linestyle.GetLBText(m_linestyle.GetCurSel(),str);
if(0==str.Compare("实线"))
{
type=PS_SOLID;
}
if(0==str.Compare("虚线"))
{
type=PS_DASH;
}
if(0==str.Compare("点线"))
{
type=PS_DOT;
}
}
添加draw()函数,实现各种功能的绘图:
voidDRAW:
:
draw(CPointpoint,intk)
{
CPenpen(type,m_linewidth,color_pen);
CClientDCClientDC(this);
ClientDC.SelectObject(&pen);
CBrushbrush(color_brush);
ClientDC.SelectObject(&brush);
intj;
j=GetCheckedRadioButton(IDC_Line,IDC_Tuya);
if(f_move)
{
switch(j)
{
caseIDC_Rect:
ClientDC.SetROP2(R2_NOT);
ClientDC.MoveTo(m_BeginPoint);
ClientDC.Rectangle(m_BeginPoint.x,m_BeginPoint.y,m_EndPoint.x,m_EndPoint.y);
if(k==1)
ClientDC.SetROP2(R2_COPYPEN);
ClientDC.MoveTo(m_BeginPoint);
ClientDC.Rectangle(m_BeginPoint.x,m_BeginPoint.y,point.x,point.y);
m_EndPoint=point;
break;
caseIDC_Line:
ClientDC.SetROP2(R2_NOT);
ClientDC.MoveTo(m_BeginPoint);
ClientDC.LineTo(point);
if(k==1)
ClientDC.SetROP2(R2_COPYPEN);
ClientDC.MoveTo(m_BeginPoint);
ClientDC.LineTo(point);
m_EndPoint=point;
break;
caseIDC_Ellipse:
ClientDC.SetROP2(R2_NOT);
ClientDC.MoveTo(m_BeginPoint);
ClientDC.Ellipse(m_BeginPoint.x,m_BeginPoint.y,m_EndPoint.x,m_EndPoint.y);
if(k==1)
ClientDC.SetROP2(R2_COPYPEN);
Client