如何使用C++Builder来编程实现图像增强处理特技显示的目的

全国统一热线:400-028-
VPS SERVER
CLOUD HOST
欢迎光临西部数码,我们将竭诚为您提供最优质的服务!
用CB实现图像的特技显示
在网页、软件和游戏中,我们经常能够看到图像的各种特技显示,如中央扩散、百叶窗帘、右下推出等,这种动感图像显示,往往给人一种赏心悦目的感觉,给我们的应用程式增加了一些美感。在C
Builder中,我们能够很容易地实现这些功能。下面以一个具体的例子,介绍实现中央扩散和百叶窗帘两种显示技巧,并说明在C
Builder中处理图像的基本方法。 在C
Builder中新建一个工程,然后在窗体上添加一个Image图像控件,把他的Picture属性配置为一幅bmp图像,调节Image控件尺寸和图像的尺寸大小相同。再在窗体上添加两个Button控件,把Button1的Caption属性配置为“中央扩散”、Button2的Caption属性配置为“百叶窗帘”。 1. 对于“中央扩散”的实现,我们利用一定的算法,通过一定的循环次数,每次显示图像的一部分,从图像的中央位置开始显示,直到显示出图像的整体。 在Button1的OnClick事件中加入以下代码: void _fastcall TForm1::Button1Click(TObject *Sender){int i,left,top,width,left = Image1-&Ltop = Image1-&Twidth = Image1-&Wheight = Image1-&Hfor (i = 0; i &= i
){//通过图像的坐标选定图像的一部分Image1-&Left = left
(width - i)/2;Image1-&Top = top
height/2 - i*height/width/2;Image1-&Width =Image1-&Height = i*height/Image1-&Refresh();}} 2.对于“百叶窗帘”,我们可利用画布(Canvas)提供的矩形拷贝(CopyRect)方法在不同画布之间进行图像复制来实现,该方法声明如下: void _fastcall CopyRect(const Windows::TRect &&Dest, TCanvas?*Canvas, const Windows::TRect &&Source);
把参数Canvas指定的源画布矩形区域Source复制到目标画布Dest的矩形区域。利用这种方法,再通过一定的算法,即可实现“百叶窗帘”的特技显示。 在Button2的OnClick事件中加入以下代码: void _fastcall TForm1::Button2Click(TObject *Sender){int inum,icount,i,j;Graphics::TBitmap *pBitmap = new Graphics::TBitmap();pBitmap-&Height = Image1-&HpBitmap-&Width = Image1-&Winum =16; //这是百叶窗的叶数icount = pBitmap-&Height /for (i = 1; i & i
)for (j = 0; j &= j
){pBitmap-&Canvas-&CopyRect(Rect(0,icount*j
i - 1, pBitmap-&Width,icount*j
i),Image1-&Canvas, Rect(0, icount*j
i - 1,pBitmap-&Width, icount*j
i));Form1-&Canvas-&Draw(Image1-&Left,Image1-&Top,pBitmap);}delete pB} 按F9运行以上程式,即可获得所需要的“百叶窗帘”效果。 Image图像控件还提供了另外一些很有用的属性和方法,大家能够充分利用C
Builder的帮助,掌控了这些属性和方法,再利用一些程式算法,就能够随心所欲地写出各种图像特技显示的程式。在我们的应用程式研发中,就能够加入这些图像特技显示,为我们的应用程式增加一些光彩。
版权申明:本站文章均来自网络,如有侵权,请联系028-0
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
服务器技术
西部数码.cn
CopyRight & &西部数码&版权所有
电话总机:028- (20线)
400电话: 400-热门搜索:
您的位置: -&
软件教程分类查找
非常抱歉!2345软件大全没能为您提供完善服务,万分感谢能得到您的指点!
您的建议:
精品软件课程
人气:87040
Visual Basic是一种由微软公司开发的包含协
人气:157869
Java,是由Sun Microsystems公司于1995年5
人气:83575
Oracle Database,又名Oracle RDBMS,或简
人气:128531
C语言是一种面向过程的计算机程序设计语言
小游戏推荐
在C++Builder中实现快速动画的方法
出处:2345软件大全
核心提示:快速动画是指每隔一段很小的时间间隔就快速擦去原有画面,并重新画上新的画面的动画技术。快速动画成功的关键就在于擦去和重画的速度必须很快,否则画面就会有闪烁现象
  快速动画是指每隔一段很小的时间间隔就快速擦去原有画面,并重新画上新的画面的动画技术。快速动画成功的关键就在于擦去和重画的速度必须很快,否则画面就会有闪烁现象。
  在vb中制作快速动画比较简单,只要把窗体的autoredraw属性设置为true,再直接调用api函数bitblt,画完一帧refresh一次。但c++builder的窗体没有autoredraw属性,只要一使用bitblt,窗体就会自动刷新,由于一帧画面往往要几次用到bitblt,画面就闪烁起来了。解决的办法就是自己定义一个不可见的缓冲区,其大小应与目标窗体相同,先在缓冲区上把一帧的画面画完,再用一次bitblt函数把缓冲区的图案贴到窗体上。请看例子:
  //在tform1 *form1;的后面添上这三句  graphics::tbitmap *p;  graphics::tbitmap *q;  int xx=0;  //---------------------  void __fastcall tform1::formcreate(tobject *sender)  {  p=new graphics:://这存放的就是要贴到窗体上的小图案  p-&handle=loadbitmap(hinstance,″aaa″);//从资源文件中载入小图案  q=new graphics:://定义缓冲区q  q-&width=//使缓冲区的大小与窗体相同  q-&height=  patblt(q-&canvas-&handle,0,0,q-&width,q-&height,0);//把缓冲区的背景变为黑色  }  //--------------------  void __fastcall tform1::formdestroy(tobject *sender)  {  //程序结束时释放内存      }  //--------------------  void __fastcall tform1::timer1timer(tobject *sender)  {  //窗体上要加上一个timer控件  xx+=2;  patblt(q-&canvas-&handle,0,0,width,height,0);//把缓冲区的背景变为黑色,同时擦去了旧的画面  bitblt(q-&canvas-&handle,xx,0,p-&width,p-&height,p-&canvas-&handle,0,0,srccopy);  //正在缓冲区上制作一帧的画面,这几句是不可见的  bitblt(q-&canvas-&handle,xx,50,p-&width,p-&height,p-&canvas-&handle,0,0,srccopy);  bitblt(q-&canvas-&handle,xx,100,p-&width,p-&height,p-&canvas-&handle,0,0,srccopy);  bitblt(q-&canvas-&handle,xx,150,p-&width,p-&height,p-&canvas-&handle,0,0,srccopy);  bitblt(q-&canvas-&handle,xx,200,p-&width,p-&height,p-&canvas-&handle,0,0,srccopy);  bitblt(q-&canvas-&handle,xx,250,p-&width,p-&height,p-&canvas-&handle,0,0,srccopy);  bitblt(q-&canvas-&handle,xx,300,p-&width,p-&height,p-&canvas-&handle,0,0,srccopy);  bitblt(canvas-&handle,0,0,width,height,q-&canvas-&handle,0,0,srccopy);  //把缓冲区的画面贴到窗体上  }
  如果实际应用时,像上面的程序那样,把画动画的语句放在timer控件的ontimer事件中,就可能会有一个小问题。如果用户暂停了动画,窗体又正好产生了重画事件(比如窗体被最小化后又被恢复),那窗体上的画面就会消失。这是因为窗体被重画时,只画了窗体的通用部分,windows并不知道原来的窗体上有自定义的画面。要想让windows把画面恢复原样,必须把画动画的语句放在窗体的onpaint事件中,timer控件的ontimer事件中只写决定图案位置的语句(如本例中的xx+=2;)和一句repaint。修改后具体的程序我就省略了,请大家自己完成吧,愿大家都做出令自己满意的精彩动画。
相关教程推荐
相关软件推荐
资源统计:无插件软件:188381个 无病毒软件:188707个 昨日已处理129个带插件、病毒的软件
本站总软件:188707个 软件总下载次数:23.021亿次
软件教程文章:103999篇 总浏览次数:3.419亿次用C++BUILDER实现POP3电子邮件的接收
作者:用户
本文讲的是用C++BUILDER实现POP3电子邮件的接收,
通过对C++BUILDER的组件设置,我们可以创建一个自己的POP3电子邮件接收程序。
一、建立一个工程文件
二、建立一个新的表单,设置它的caption属性为Getmail,在上面放置一个TpageControl控件,单击
通过对C++BUILDER的组件设置,我们可以创建一个自己的POP3电子邮件接收程序。
一、建立一个工程文件
二、建立一个新的表单,设置它的caption属性为Getmail,在上面放置一个TpageControl控件,单击右键创建三个TabSheet(1,2,3)。在TabSheet1上放置四个Edit(1,2,3,4)控件并清除它们的Text属性及两个Botton(1,2),其中Edit1用以输入POP3服务器的名称;Edit2用以设置访问端口号,我们设置它为110,并将它的Text属性设为110;Edit3用以输入用户名;Edit4用以输入口令。设Botton1的caption为“连接”,Botton2的caption为“断开连接”。在TabSheet2上放置五个Edit(5,6,7,8,9)控件、两个Memo控件和三个Botton(3,4,5),Edit5用来显示邮件的编号;Edit6、Edit7、Edit8和Edit9分别用来显示邮件的发送者、邮件的、大小及ID号;Memo1用来显示邮件的正文;Memo2用来显示邮件头;Botton3、Botton4、Botton5的caption属性分别设置为“删除”、“邮件”和“邮件信息”。在TabSheet3上放置两个Botton和一个Memo控件,其中Botton6的caption属性为“邮件”;Botton7的caption为“清除列表”;Memo的用途自然为显示邮件列表。在表单的底部放置一个StatusBar控件用以显示工作状态。最后,最重要的是在表单上放置一个NMPOP3控件,在这个程序里,它是我们与POP3服务器通讯的核心。
三、编写代码
为Botton1的OnClick事件编写代码:
NMPOP31-〉AttachFilePath = ″.″; //设定邮件的存储目录
NMPOP31-〉DeleteOnRead =  //读完邮件后是否删除
NMPOP31-〉ReportLevel = Status_B //控制OnStatus事件和Status属性报告的资料的数量
NMPOP31-〉TimeOut = 20000;     //设置超时的时间
NMPOP31-〉Host = Edit1-〉T  //设置pop3服务器的主机名
NMPOP31-〉Port = StrToInt(Edit2-〉Text); //设置pop3服务器的端口号
NMPOP31-〉UserID = Edit3-〉T  //取得用户名
NMPOP31-〉Password = Edit4-〉T //得到口令
NMPOP31-〉Connect(); //开始连接
Label10-〉Caption = ″# of Messages: ″+IntToStr(NMPOP31-〉MailCount); //显示邮件的数量
为Botton2的OnClick事件编写代码:
NMPOP31-〉Disconnect(); //使之能够与服务器断开连接
为Botton3的OnClick事件编写代码,当点击它时可以删除邮件:
NMPOP31-〉DeleteMailMessage(StrToInt(Edit5-〉Text));
为Botton4的OnClick事件编写代码,当点击它时显示整个邮件:
NMPOP31-〉GetMailMessage(StrToInt(Edit5-〉Text));
Edit6-〉Text = NMPOP31-〉MailMessage-〉F //通过MailMessage的From属性得到发信人
Edit7-〉Text = NMPOP31-〉MailMessage-〉S //通过MailMessage的Subjecet属性得到主题
Edit9-〉Text = NMPOP31-〉MailMessage-〉MessageId; //通过MailMessage的MessageIds属性得到Id
Memo2-〉Lines-〉Assign(NMPOP31-〉MailMessage-〉Head);
Memo1-〉Lines-〉Assign(NMPOP31-〉MailMessage-〉Body);
if (NMPOP31-〉MailMessage-〉Attachments-〉Text != ″″)
ShowMessage(″Attachments:\n″+NMPOP31-〉MailMessage-〉Attachments-〉Text);
为Botton5的OnClick事件编写代码,点击它时将在Memo中显示邮件的概要信息:
NMPOP31-〉GetSummary(StrToInt(Edit5-〉Text));
Edit6-〉Text = NMPOP31-〉Summary-〉F
Edit7-〉Text = NMPOP31-〉Summary-〉S
Edit8-〉Text = IntToStr(NMPOP31-〉Summary-〉Bytes);
Edit9-〉Text = NMPOP31-〉Summary-〉MessageId;
为Botton6的OnClick事件编写代码,点击它时将在Memo3中显示邮件列表:
NMPOP31-〉List(); //得到邮件的数量和大小的列表
为Botton7的OnClick事件编写代码,点击它时将清除Memo3中的邮件列表:
Memo3-〉Clear();
以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索邮件
MailMessage
TPageControl
java pop3 接收邮件、pop3接收邮件服务器、python pop3 接收邮件、php pop3 接收邮件、pop3接收邮件,以便于您获取更多的相关知识。
稳定可靠、可弹性伸缩的在线数据库服务,全球最受欢迎的开源数据库之一
6款热门基础云产品6个月免费体验;2款产品1年体验;1款产品2年体验
弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率
开发者常用软件,超百款实用软件一站式提供
云栖社区()为您免费提供相关信息,包括
,所有相关内容均不代表云栖社区的意见!怎样在c++builder中导入图像数据并显示?
怎样在c++builder中导入图像数据并显示?
匿名提问于
用c++builder处理图像时一般用打开图像对话框、选择图像的方式导入图像(如选择***.bmp),然后用Image显示。现在的问题是怎样直接将图像数据导入并显示,如导入一个0、1数组,显示二值图像?
建议你看看C++Builder的图像处理相关资料,比如图像旋转技术,就是把图像每一点的像素信息(RGB值)提取出来再重新排列,就实现了图像旋转,如果每个像素点取反就实现了图像反色(底片效果),如果每个点rgb值取平均,就实现图像黑白化,你可以借鉴一下。
请遵守网上公德,勿发布广告信息
相关问答:}

我要回帖

更多关于 opencv实现图像旋转 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信