南工程多媒体处理综合应用设计Word文档下载推荐.docx
- 文档编号:6453412
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:53
- 大小:2.38MB
南工程多媒体处理综合应用设计Word文档下载推荐.docx
《南工程多媒体处理综合应用设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《南工程多媒体处理综合应用设计Word文档下载推荐.docx(53页珍藏版)》请在冰点文库上搜索。
2.1图像显示的基本方法
显示图像的方法并不复杂,图像已经绘制好保存在文件中,需要做的工作就是有效加载图像文件并让它显示出来,这里我们讨论几种最常用的方法。
1.使用Image类对象
抽象类Image是System:
:
Drawing命名控件中所有图像类的基类,它有Bitmap类和Metafile类两个派生类,不仅可以处理位图(Bitmap)和图元文件(Metafile),而且支持以各种图像文件格式创建Image类对象,包括常见的BMP、JGP、GIF、PNG、TIFF和ICON等格式。
Image类的常用属性和方法如表2_1和表2_2所示。
表2_1Image类部分常用属性
属性名称
功能描述
Height
获取当前Image的高度(以像素为单位)
HorizontalResolution
获取当前Image的水平分辨率(以“像素/英寸”为单位)
Palette
获取或设置用于当前Image的调色板
PhysicalDimension
获取当前图像的实际宽度和高度(以像素为单位)
PixelFormat
获取此Image的像素格式
RawFormat
获取此Image的文件格式
Size
获取此图像的以像素为单位的宽度和高度。
VerticalResolution
获取此Image的垂直分辨率(以“像素/英寸”为单位)
Width
获取此Image的宽度(以像素为单位)
表2_2Image类部分常用方法
方法名称
Clone
创建此Image的一个精确副本。
Dispose()
释放由此Image占用的所有资源。
FromFile(String)
从指定的文件创建Image
GetBounds
以指定的单位获取图像的界限
GetPixelFormatSize
返回指定像素格式的颜色深度(每个像素的位数)
FromHbitmap
从Windows句柄创建Bitmap
FromStream
从指定的数据流创建Image
RotateFlip
该方法旋转、翻转或者同时旋转和翻转Image。
Save
将图像以指定的格式保存到指定的流中
2、使用的CDC类的位图函数来输出图像。
BOOL
StretchDLBit(HDChdc,int
x,int
y,int
nWidth,int
nHeight,CDC*
pSrcDC,int
xSrc,int
ySrc,int
nSrcWidth,int
nSrcHeight,DWORD
dwRop);
x,y
表示目标矩形区域左上角的x,y坐标点;
nWidth,nHeight:
表示目标设备中绘制位图的宽度和高度;
pSrcDC
表示源设备上下文对指针;
xSrc,ySrc:
表示源设备上下文的起点x,y轴坐标;
nSrcWidth,nSrcHeight:
表示需要复制的位图宽度和高度;
dwRop:
表示光栅操作代码。
COLORREF
GetPixel(
int
x,
y
)
const;
//返回坐标点的颜色值。
SetPixel(
y,
crColor
);
//设置的颜色值
BYTE
GetRValue(DWORD
rgb
//获取一个颜色值的RGB各个分量:
GetGValue(DWORD
GetBValue(DWORD
3、获取鼠标位置的颜色值
获取某一点的颜色只要得到当前鼠标的设备环境CDC类对象即可,因为调用CDC类的GetPixel方法可获取某一点的颜色值。
VC提供了三个宏,用于获取某一颜色的红、绿、蓝三基色。
1)GetRValue宏
该宏用于获取指定颜色的红颜色值
2)GetGValue宏
该宏用于获取指定颜色的绿颜色值
3)GetBValue宏
该宏用于获取指定颜色的蓝颜色值
rgb标识一个颜色值。
返回值:
指定颜色的红色值。
指定颜色的绿色值。
指定颜色的蓝色值。
4、GetPixel和SetPixel介绍
1)GetPixel方法
该方法用于获取某一点的颜色值。
语法:
COLORREF
POINT
point
参数:
x、y、point标识坐标点。
坐标点的颜色值。
2)SetPixel方法
该方法用于设置某一点的颜色值。
point,
参数x、y、point标识坐标点。
crColor标识设置的颜色值。
坐标点实际显示的颜色值。
2.2图形绘制的实现原理
(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.3文字处理基本技巧
1文字处理的基本知识
Windows使用了两种主要字体:
一种是等宽字体,一种是可变宽字体。
同时Windows又定义了三种不同类型的字体:
光栅字体(设备相关的点阵图字体)、矢量字体(设备无关的由一系列线段构成的字体)、TrueType字体(设备无关的用线条和样条曲线来定义轮廓的字体),其中TrueType字体可以在进行任何限度的缩放后,而仍然保持良好的字体质量。
此外,还有OpenType字体,它也是设备无关的,可以用来定义手写字体。
无论哪种字体,在Windows系统中都是使用TEXTMERIC和LOGFONT两个结构来进行描述的。
在应用中通过这两个结构来获取字体信息,定义显示文字所需要的字体。
2文本输出函数
函数名
功能
TextOut
用当前字体在指定位置处写一个字符串
ExTextOut
用当前字体在矩形区域内写一个字符串
TabbedTextOut
在指定位置写一个字符串
DrawText
在指定矩形中绘制格式化的文本
3
文字处理的基本步骤
1)获取设备环境(CDC*
pDC)
2)设置系统字体
----默认字体
----得到当前的字体(部分)信息,以该信息输出
-----创建自定义字体,选入设备环境
3)输
出
文
本
(文本输出函数)
4设置系统字体的步骤
1)创建字体对象:
CFont
font;
//
font为字体对象
2)创建字体
CreateFont()
CreatePointFont
CreateFontIndirect()
CreateFontFontIndirect()
3)
调用成员函数SelectObject将字体选入设备环境:
SelectObject(&
font);
2.4音频/视频处理介绍
Mediaplayer控件常用属性
属性/方法名:
说明:
[基本属性]
URL:
String;
指定媒体位置,本机或网络地址
uiMode:
播放器界面模式,可为Full,Mini,None,Invisible
playState:
integer;
播放状态,1=停止,2=暂停,3=播放,6=正在缓冲,9=正在连接,10=准备就绪
enableContextMenu:
Boolean;
启用/禁用右键菜单
fullScreen:
boolean;
是否全屏显示
[controls]
wmp.controls//播放器基本控制
controls.play;
播放
controls.pause;
暂停
controls.stop;
停止
controls.currentPosition:
double;
当前进度
controls.currentPositionString:
string;
当前进度,字符串格式。
如“00:
23”
controls.fastForward;
快进
controls.fastReverse;
快退
controls.next;
下一曲
controls.previous;
上一曲
[settings]
wmp.settings//播放器基本设置
settings.volume:
音量,0-100
settings.autoStart:
是否自动播放
settings.mute:
是否静音
settings.playCount:
播放次数
[currentMedia]
wmp.currentMedia//当前媒体属性
currentMedia.duration:
媒体总长度
currentMedia.durationString:
媒体总长度,字符串格式。
如“03:
24”
currentMedia.getItemInfo(conststring);
获取当前媒体信息"
Title"
=媒体标题,"
Author"
=艺术家,"
Copyright"
=版权信息,"
Description"
=媒体内容描述,"
Duration"
=持续时间(秒),"
FileSize"
=文件大小,"
FileType"
=文件类型,"
sourceURL"
=原始地址
currentMedia.setItemInfo(conststring);
通过属性名设置媒体信息
currentMedia.name:
同currentMedia.getItemInfo("
)
[currentPlaylist]
wmp.currentPlaylist//当前播放列表属性
currentPlaylist.count:
当前播放列表所包含媒体数
currentPlaylist.Item[integer];
获取或设置指定项目媒体信息,其子属性同wmp.currentMedia
三、具体设计方法即步骤
1)启动VisualStudio2012开发环境,在菜单中选择“文件”→“新建”→“项目”,弹出“新建项目”对话框;
在对话框的左侧“项目类型”选项中选择CLR,在右侧显示的已安装应用程序项目模板中选择“MFC”,输入大作业项目名称“Commixwork-240121214”,选择好合适的程序文件存放路径,点“确定”按钮完成,如图3-1所示。
图3-1创建大作业项目
3.打开资源视图,在菜单的主框架上添加文字处理、绘图、图像处理、音频视频、清屏子菜单
4.图片处理
图片采用对话框形式制作
创建如图所示的PHOTO对话框
采用非模式对话框打开:
在commixwork-240121214view.cpp文件中添加代码如下:
voidCCommixwork240121214View:
OnPhoto()
{
//TODO:
在此添加命令处理程序代码
CPhoto*photo=newCPhoto;
photo->
Create(IDD_Photo);
ShowWindow(SW_NORMAL);
}
ID见上
首先添加一些成员变量
CEditm_red;
CEditm_green;
CEditm_blue;
CStaticm_test;
private:
intnum;
4.1打开图片
代码如下:
voidCPhoto:
OnBnClickedButton1()//打开图片
在此添加控件通知处理程序代码
CStringfilter;
filter="
所有文件(*.bmp,*.jpg,*.gif,*tiff)|*.bmp;
*.jpg;
*.gif;
*.tiff|BMP(*.bmp)|*.bmp|JPG(*.jpg)|*.jpg|GIF(*.gif)|*.gif|TIFF(*.tiff)|*.tiff||"
;
CFileDialogdlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,filter,NULL);
//按下确定按钮dlg.DoModal()函数显示对话框
if(dlg.DoModal()==IDOK)
{
//打开对话框获取图像信息
CStringBmpName=dlg.GetPathName();
//获取文件路径名如D:
\pic\abc.bmp
CStringEntName=dlg.GetFileExt();
//获取文件扩展名
EntName.MakeLower();
//将文件扩展名转换为一个小写字符
if(EntName.Compare(_T("
bmp"
))==0)
{
//定义变量存储图片信息
BITMAPINFO*pBmpInfo;
//记录图像细节
BYTE*pBmpData;
//图像数据
BITMAPFILEHEADERbmpHeader;
//文件头
BITMAPINFOHEADERbmpInfo;
//信息头
CFilebmpFile;
//记录打开文件
//以只读的方式打开文件读取bmp图片各部分bmp文件头信息数据
if(!
bmpFile.Open(BmpName,CFile:
modeRead|CFile:
typeBinary))
return;
if(bmpFile.Read(&
bmpHeader,sizeof(BITMAPFILEHEADER))!
=sizeof(BITMAPFILEHEADER))
bmpInfo,sizeof(BITMAPINFOHEADER))!
=sizeof(BITMAPINFOHEADER))
pBmpInfo=(BITMAPINFO*)newchar[sizeof(BITMAPINFOHEADER)];
//为图像数据申请空间
memcpy(pBmpInfo,&
bmpInfo,sizeof(BITMAPINFOHEADER));
DWORDdataBytes=bmpHeader.bfSize-bmpHeader.bfOffBits;
pBmpData=(BYTE*)newchar[dataBytes];
bmpFile.Read(pBmpData,dataBytes);
bmpFile.Close();
//显示图像
CWnd*pWnd=GetDlgItem(IDC_STATIC1);
//获得pictrue控件窗口的句柄
CRectrect;
pWnd->
GetClientRect(&
rect);
//获得pictrue控件所在的矩形区域
CDC*pDC=pWnd->
GetDC();
//获得pictrue控件的DC
pDC->
SetStretchBltMode(COLORONCOLOR);
StretchDIBits(pDC->
GetSafeHdc(),0,0,rect.Width(),rect.Height(),0,0,bmpInfo.biWidth,bmpInfo.biHeight,pBmpData,pBmpInfo,DIB_RGB_COLORS,SRCCOPY);
}
}
4.2浮雕、锐化、反色
OnBnClickedButton2()//浮雕
CWnd*pWnd=GetDlgItem(IDC_STATIC1);
CRectrect;
pWnd->
CDC*pDC=pWnd->
pDC->
CWnd*pWnd1=GetDlgItem(IDC_STATIC2);
CRectrect1;
pWnd1->
rect1);
CDC*pDC1=pWnd1->
pDC1->
intr1,g1,b1,r2,g2,b2;
for(inti=1;
i<
rect.right+1;
i++)
for(intj=1;
j<
rect.bottom+1;
j++)
COLORREFcolor=pDC->
GetPixel(i,j);
COLORREFnextcolor=pDC->
GetPixel(i+1,j+1);
//doublem_gray;
r1=GetRValue(color);
g1=GetGValue(color);
b1=GetRValue(color);
r2=GetRValue(nextcolor);
g2=GetGValue(nextcolor);
b2=GetBValue(nextcolor);
r1=r1-r2+128;
g1=g1-g2+128;
b1=b1-b2+128;
if(r1>
255)
r1=255;
elseif(r1<
0)
r1=0;
if(g1>
g1=255;
elseif(g1<
g1=0;
if(b1>
b1=255;
elseif(b1<
b1=0;
color=RGB(r1,g1,b1);
pDC1->
SetPixel(i,j,color);
OnBnClickedButton4()//反色
//FOLLOWEDNODEFORTHEFIRSTMETHOD
BYTEr,g,b;
for(inti=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 工程 多媒体 处理 综合 应用 设计