C++Builder图片放大缩小.docx
- 文档编号:7957217
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:14
- 大小:244.80KB
C++Builder图片放大缩小.docx
《C++Builder图片放大缩小.docx》由会员分享,可在线阅读,更多相关《C++Builder图片放大缩小.docx(14页珍藏版)》请在冰豆网上搜索。
C++Builder图片放大缩小
C++Builder程序设计
学号:
************
学生所在学院:
信息工程学院
学生姓名:
*****
任课教师:
*****
教师所在学院:
信息工程学院
2010年1月5日
2010级07班
实现图像的放大、缩小、任意角度旋转功能
邱剑
信息工程学院
摘要:
当前,图形是多媒体技术中一种重要的信息媒体,数据量极大并且多种多样的存储格式,阻碍了多媒体技术的发展,为了有效地使用各类图形文件,为使多媒体技术蓬勃发展,图像的变化工作就显得极其重要。
C++Builder具有强大的更新和移植能力,应用也非常之广泛,学习C++Builder对程序设计思维能力有很好的锻炼
本文主要介绍了如何利用C++程序设计实现了图像的任意倍数的放大、缩小、任意角度
旋转功能。
在数字图像处理应用领域的简单运用及其重要意义,首先阐述了C++Builder
软件的基本窗体结构,以及其属性,并简单的介绍图像处理软件的方法和步骤。
本设计表明,通过简单的程序设计,可以实现强大的功能。
实现功能的方式多种多样
灵活多变,在日常的学习中要多注意各种函数的使用,这样才能更快的提高编写能力,
实现更加强大的功能
关键词:
C++放大缩小旋转
Abstract:
Atpresent,theimageisoneofthemostimportantmultimediainformationmedia,datagreatquantityandvarietyofstorageformats,obstructthemultimediatechnologydevelopment,inordertoeffectivelyuseofvariousgraphicsfiles,toenablemultimediatechnologyvigorousdevelopment,imagechangesjobsareveryimportant.C++Builderhasstrongupdateandtransplantationability,applicationsareveryextensive,studyc++Builderforprogramdesignthinkingabilityhaveverygoodexercise
Thispapermainlyintroducedhowtousec++programmingrealizeimagearbitrary
multiplesmagnification,reducing,arbitraryAngleRotatingfunction.In
digitalimageprocessingapplications,thesimpleuseanditssignificance,
firstexpoundedc++BuilderThebasicformstructure,softwareandits
attributes,andbrieflyintroducesimageprocessingsoftwaremethodsandsteps
of.Thisdesignshowsthatthroughsimpleprogramming,mayrealizethepowerful
functions.FunctionsbymanywaysFlexible,indailylearningtopaymore
attentiontotheuseofvariousfunctions,suchabilityimprovedwriting
ability,Realizemorepowerfulfunctions
Keywords:
C++enlargereducerotation
C++的简单介绍
C++,这个词在中国大陆的程序员圈子中通常被读做“C加加”,而西方的程序员通常读做“Cplusplus”,它是一种使用非常广泛的计算机编程语言。
C++是一种静态数据类型检查的,支持多重编程范式的通用程序设计语言。
它支持过程化程序设计、数据抽象、面向对象程序设计、制作图标等等泛型程序设计等多种程序设计风格。
美国AT&T贝尔实验室的本贾尼·斯特劳斯特卢普(BjarneStroustrup)博士在20世纪80年代初期发明并实现了C++(最初这种语言被称作“CwithClasses”)。
一开始C++是作为C语言的增强版出现的,从给C语言增加类开始,不断的增加新特性。
虚函数(virtualfunction)、运算符重载(operatoroverloading)、多重继承(multipleinheritance)、模板(template)、异常(exception)、RTTI、名字空间(namespace)逐渐被加入标准。
1998年国际标准组织(ISO)颁布了C++程序设计语言的国际标准ISO/IEC14882-1998。
C++是具有国际标准的编程语言,通常称作ANSI/ISOC++。
1998年是C++标准委员会成立的第一年,以后每5年视实际需要更新一次标准,下一次标准更新将是在2009年,目前我们一般称该标准C++0x。
遗憾的是,由于C++语言过于复杂,以及他经历了长年的演变,直到现在(2004年)只有少数几个编译器完全符合这个标准(这么说也是不完全正确的,事实上,至今为止没有任何一款编译器完全支持ISOC++)。
另外,就目前学习C++而言,可以认为他是一门独立的语言;他并不依赖C语言,我们可以完全不学C语言,而直接学习C++。
根据《C++编程思想》(ThinkinginC++)一书所评述的,C++与C的效率往往相差在正负5%之间。
所以有人认为在大多数场合C++完全可以取代C语言(然而我们在单片机等需要谨慎利用空间、直接操作硬件的地方还是要使用C语言)。
为了使用者操作方便,C++bulider油然而生。
第一章系统组件及功能介绍
1.1Form
Form,名为窗体,窗体是一个对话框,用户在窗体上完成操作,实现所需要的功能。
通过对窗体的基本属性的设置,可以实现窗体的静态功能。
再通过简单的编程设置,可以很好的完成所需要达到的效果,给人美观简洁的印象。
窗体的基本属性
Color属性:
设置窗体的背景颜色。
Font属性:
设置窗体的字体属性。
Enabled:
设置窗体是否有效,设置为false则无法对窗体进行任何操作。
Hint属性:
设置VCL控件的ShowHint属性的提示提示信息。
Caption属性:
设置窗体的标题名称。
Name属性:
窗体名字,用于显示区别。
WindowState属性:
设置窗体的初始状态,取值为wsNormal(窗体设置时的小)wsMaximized(最大化显示),wsMinimized(最小化显示)
BorderStyle属性:
设置窗体的类型。
bsDialog:
窗体具有单线边框,大小不能改变,而且没有最小化及最大化按钮。
bsNone:
窗体没有边框,也没有标题栏,边框的大小不能改变。
bsSingle:
边框大小不可变的标准窗体,有最小化及最大化按钮。
bsSizable:
边框大小可变的标准窗体,有最小化及最大化按钮。
bsSizeToolWin:
没有最小化及最大化按钮,边框大小可变。
。
bsToolWindows:
风格与bsSignle类似,只是标题栏比较小。
选择该项时,没有最小化及最大化按钮,边框大小不可变。
biSystemMenu:
通过单击标题栏左边的图标,或在标题上单击鼠标右键来显示系统菜单。
biMinimize:
在标题栏右边显示最小化按钮
biMaximize:
在标题栏右边显示最大化按钮
biHelp:
在标题栏右边显示帮助按钮。
只有窗体的BorderStyle属性设置为bsDialog或者窗体属性BorderIcons中不包括biMaximize和bimMinize时,biHelp设置才有效。
1.2TLabel
TLabel,名为标签。
标签主要用于显示说明,让人简单明了的理解窗体中各操作的功能以及属性。
1.显示文本
在标签组件中实际显示的文本是由Caption属性控制的,该属性可以在属性页中设置,或在执行程序时用代码标签组件中所显示的文本,以适应不同用途的需要。
(Label1->Caption="";)
2.自动改变大小
标签的大小由绘制时的大小确定,当然也可以通过Height、Width属性来确定。
当标签的大小标签组件提供了可以随时改变组件尺寸、以便方便帮助用户适应较长或较短标题的两种属性AutoSize和WordWarp。
属性AutoSize决定了组件是否可以自动改变尺寸,以适应其内容的变化。
如:
将该属性设为Ture,标签组件便会根据内容改变水平方向的尺寸。
1.3TBitBtn
TBitBtn组件可以在按钮表面上显示位图(Bitmap)文件,还可以改变按钮上文字的颜色。
该组件有以下几个特殊的属性:
Kind属性:
Kind属性决定了TBitBtn组件的种类。
它是一个枚举型属性,取值可以是:
bkCustom(自定义)、bkOk、bkCancel、bkYes、bkNo、bkHelp、bkClose、bkAbort(中止)、bkRetry(重试)、bkIgnore和bkAll。
用户自己指定位图,该属性要设置为bkCustom(自定义),然后通过Glyph属性指定一个位图。
如果不想在按钮上显示文字,只要将按钮的Caption属性清空。
Glyph属性:
通过Glyph属性可将指定的图形
1.4Edit
Edit,名为文本编辑组件,在C++Builder中使用的频率较为频繁,它是一个文本编辑区域,程序运行时可以用来输出、输入和编辑文本。
文本编辑框的属性很多,有些属性是属于前面已经介绍的基本属性,还有一些属性将直接影响文本编辑框的应用。
下面就介绍一下TEdit组件的Text属性
文本编辑框中重要的属性当属Text属性,该属性中存放了文本编辑框中显示的实际文本。
Text属性有三种使用方法:
1.在设计时属性窗口中设置文本编辑框初始显示的内容默认为Edit1。
2.在运行时通过代码设置或由用户直接输入:
Edit1->Text=“C++Builder”;
3.返回文本编辑框中当前内容。
当用户对文本编辑框中的内容进行输入、编辑修改后,可以用Text属性将当前内容返回。
例如:
Label1->Caption=Edit1->Text;
1.5TopenpictureDialog对话框组件
TOpenpictureDialog对话框组件有浏览文件的功能,用于打开图形文件,通过Execute打开相应的对话框。
在TOpenpictureDialog对话框显示的时候,右侧多了一个可以预览的图形区域。
如果选中的文件被组件所支持,则图形可以显示在预览区域。
可以识别的文件有:
位图(.bmp)、图标文件(.ico)、windows图元文件(.wmf)以及增强型图元文件(.emf)等。
所包含的属性有Filter、DefaultExt、FilterIndex、Title、InitialDir、Options、Filename等属性。
Filename属性:
Filename属性返回用户最后选择的文件名,文件名中包含了文件所在的路径。
如果在打开options属性中设置了ofAllowMultiSelect为ture,也就可以一次选择多个文件,否则通过读取Files->String[i]的值可以获取所有选中的文件名。
1.6Mainmenu组件
Mainmenu,又名为菜单栏组件,主要用于实现菜单功能。
使得窗体表面更加简洁。
在窗体上添加了此组件。
即可在窗体的上边框编辑,产生菜单。
然后修改其属性,并通过程序编程,完成功能。
Caption属性,设置菜单的名字
特别注意,visible属性设置为true,checked属性、default属性、radioltem属性均设置为false,enabled属性也设置为true。
在onclick事件中,要设置N2click事件,这样,通过编程,点击了菜单栏,其功能才能实现。
第二章主窗体Form的设计
2.1主窗体Form设计
在Form1中添加以下控件:
Edit控件两个、label控件两个、Button控件三个、Bitbtn控件一个、Image控件一个、OpenpictureDialog控件一个、Mainmenu控件一个。
如图2.1所示:
图2.1主窗体的设计
表2-1所示为各控件的Caption属性,方便操作。
表2-1控件属性
控件名
属性名
设定值
Form1
Label1
Label2
Bitbtn1
Caption
Caption
Caption
Caption
图像设计
请输入缩放倍数
请输入旋转角度
旋转图像
请输入缩放倍数
Button1
Caption
放大
Button2
Caption
初始化
Button3
Caption
缩小
N2
Caption
打开图片
N3
Caption
保存图片
N4
Caption
退出
2.2主界面的设计
第一步:
创建新的窗体。
第二步:
在窗体上添加Edit控件两个、label控件两个、Button控件三个、Bitbtn控件一个、Image控件一个、OpenpictureDialog控件一个、Mainmenu控件一个。
第三布:
设置各控件的Caption属性,设置如表2-1所示。
第四步:
对各控件进行简单的排列,使得界面美观即可,示例如图2.1所示。
第五步:
双击所要使用到的控件,并且对其编程,实现功能。
第三章程序设计及算法介绍
3.1浏览图像
之前,由于在窗体中加入TOpenpictureDialog对话框组件,还有Mainmenu组件,点击菜单中的打开文件按钮,然后对其进行简单的编程,如:
OpenPictureDialog1->Execute()。
此段语句,即可成功打开浏览对话框。
3.2放大,缩小,初始化功能
第一步:
双击Caption属性为放大的button,进如onclick事件的编程界面。
首先得判断是否在edit组件中有数字输入值,避免在没有输入的情况下程序坏死而死机。
然后读取图片的初始宽度以及高度,则放大后的图片宽度=原始图片的宽度*放大倍数;放大后的图片高度=原始图片的高度*放大倍数。
为防止图片显示过大而超出了界面,对图片位置再进行简单的规定,这样,放大的功能就完成了。
第二步:
双击Caption属性为缩小的button,进如onclick事件的编程界面。
编程步骤与放大时候的步骤类似,只不过算法存在了差异。
放大后的图片宽度=原始图片的宽度/缩小倍数;放大后的图片高度=原始图片的高度/缩小倍数。
这样缩小功能也能实现了
第三步:
双击Caption属性为初始化的button,进如onclick事件的编程界面。
此时。
不需要考虑edit组件上是否有输入值。
无论是否有输入,初始化的图片都是一样的,所以不必有此项功能。
初始化图片的算法就比较简单了。
只是简单的赋值就可以实现了。
即:
初始化图片的宽度=原始图片的宽度,初始化图片的高度=原始图片的宽度。
3.3图片旋转功能
双击Caption属性为旋转图像的bitbtn,进如onclick事件的编程界面。
与放大缩小功能相同,首先得判断是否有输入的值,避免程序坏死。
定义一个angle,此时要使用Graphics函数,使得图片能够实现旋转的功能。
3.4程序退出功能
程序运行结束了,需要安全退出。
只需要简单的关闭窗口,就可以完成退出功能了。
3.5程序的算法介绍
3.5.1图像的放大和缩小算法
实现图像缩放的算法原理:
假设图像X轴方向缩放比例是
,Y轴方向缩放比例是
。
1.当
>1且
>1时,图像是被放大。
例如,当
=
=1时图像没有任何的变化,保持原有的面貌。
当
=
=5时,图像被放大5倍。
2.当
<1且
<1时,图像是被缩小。
例如,当
=
=0.5时,图像被缩到一半大小,再次点击,则会变成原有的0.25倍。
3.算法公式:
原图中点(x0,y0)对应新图中的(x1,y1)为:
x0=x1*
;y0=y1*
。
实现方法介绍:
利用C++中Image控件的Stretch属性,将原始宽度和长度分别乘以放缩系数,即可以实现图像的放大与缩小。
这样就能实现图像的缩放功能了。
3.5.2图像的旋转算法
实现图像旋转的算法原理:
图像的旋转是以图像的中心为原点,旋转一定的角度。
旋转后图像的大小有可能会发生些许改变的。
如图3.5.1,点(x0,y0)经过旋转
度后坐标变成(x1,y1)。
算法公式:
在旋转前的坐标计算法:
在旋转后的坐标计算法:
图3.5.1旋转算法示意图
由图3.5.1可知,旋转是绕坐标轴原点开始的,向右为X轴正方向,向上为Y轴正方向,设其为坐标系II,而屏幕中的坐标一般以左上角为原点,以向右为X轴正方向、向下为Y轴正方向,设其为坐标系I。
如果是绕一个指定点旋转,则需要先将坐标系平移到该点,再进行旋转,最后再平移回原来的原点,以完成旋转。
实现方法介绍:
首先必须先获取原始图像的宽度和高度以及原图的中心三个点的坐标,经过旋转后得到新图三个点的坐标,将角度化为弧度,然后计算新图的高度以及宽度,并且将值返回。
这样就能实现图片的旋转功能了。
第四章运行结果展示
4.1打开软件
首先。
运行编辑好的软件,就会出现如图4.1所示的结果。
可见在没有读取图像之前,各按钮是灰色的,说明是不可以使用的,点击菜单:
文件,然后打开图片如图4.2.
图4.1主界面
图4.2打开图片后
4.2图像的放大和缩小
在“请输入缩放倍数”文本框内输入数字3,点击放大、缩小后运行结果图如下:
图4.3原图像
图4.4缩小3倍的图像
图4.5放大3倍后的图像
4.3图像的旋转
打开图像后,在“请输入旋转角度”文本框内输入数字30,60,90,180,然后点击“旋转图像”按钮,可得以下结果。
特别注意,每次旋转后,初始化图片,然后继续操作,以更好的看到旋转的效果。
原图依然使用图4.3。
图4.6旋转30°图4.7旋转90°
图4.8旋转60°图4.9旋转180°
由图4.6和图4.8可以看出。
当旋转角度区域在0°到90°的之间。
图片的旋转会产生失真,因为其旋转是在原图的中点为原点的区域内进行的,所以会使得图片旋转过程中像素损失,这也是算法所导致的。
而图4.7和图4.9,由于正好是90°和180°,图片在区域内旋转没有发生失真。
最后,退出软件即可完成所有操作。
第五章小结
经过一段时间的学习,对C++builder有了初步的了解。
C++builder有着可视化,面向对象程序与设计的优势,而且对编程能力有所要求。
学习和使用C++builder可以很好扩展思维,锻炼思维能力。
本文通过对程序的简单设计,实现了对图像的放大,缩小,旋转的处理。
在旋转过程中,我们可以看到,由于算法的原因,图片在旋转过程中会出现失真的现象,为了克服这个失真,就要需要改进算法,或则使用新的算法来完成设计,在此寄希望于读者,完成这一目的。
参考文献
[1]钱能.C++程序设计教程.北京:
清华大学出版社,2005年
[2]罗斌等.C++Builder精彩编程实例集锦.北京:
中国水利水电出版社,2005,220-222
[3]余宇峰等.C++程序设计与应用开发.北京:
清华大学出版社,2008年
[4]陆卫忠,刘文亮等.C++Builder6程序设计教程.北京:
科学出版社,2005,44-64
[5]翟焱,冉欣等编著.C++Builder4.0多媒体开发技术.北京:
人民邮电出版社,2000,62-101
[6]袁国忠,陈秋萍等编著.21天学通C++.北京:
人民邮电出版社,2009年
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Builder 图片 放大 缩小