多媒体编程课程设计.docx

上传人:b****7 文档编号:11215528 上传时间:2023-02-25 格式:DOCX 页数:78 大小:1.27MB
下载 相关 举报
多媒体编程课程设计.docx_第1页
第1页 / 共78页
多媒体编程课程设计.docx_第2页
第2页 / 共78页
多媒体编程课程设计.docx_第3页
第3页 / 共78页
多媒体编程课程设计.docx_第4页
第4页 / 共78页
多媒体编程课程设计.docx_第5页
第5页 / 共78页
点击查看更多>>
下载资源
资源描述

多媒体编程课程设计.docx

《多媒体编程课程设计.docx》由会员分享,可在线阅读,更多相关《多媒体编程课程设计.docx(78页珍藏版)》请在冰豆网上搜索。

多媒体编程课程设计.docx

多媒体编程课程设计

 

南京工程学院

多媒体编程基础课程

综合作业说明书

 

题目多媒体处理综合应用设计

班级

学生姓名刘土豪

学号*******

 

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

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

当前位置:首页 > 外语学习 > 英语学习

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

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