<h3>实例16 图像的特效显示 </h3>2009年10月13日<br/><br/> 第2章 图形图像处理实例 <br/><br/> 实例16 图像的<em>特效</em>显示 <br/><br/> 在Windows处理图像的API函数中,Bitblt()函数是非常重要而且是常用的函数之一。运用这个函数,可以实现图像的旋转和动态显示等效果。如果想在图像处理上有所突破,也必须熟练掌握Bitblt()函数。本实例实现的功能是以门帘效果来显示一幅BMP图像 <br/><br/> 向窗体上添加一个TImage<em>组件</em>、一个OpenPictureDialog<em>组件</em>、一个TPaintBox<em>组件</em>和一个TButton<em>组件</em>,TImage<em>组件</em>充当原图片显示的载体,TPaintBox<em>组件</em>用来显示图像的<em>特效</em>。添加<em>组件</em>后的窗体如图所示。 <br/><br/> <a style="CURSOR: pointer" target="_blank"><br/><br/> <img οnclick="window.open('http://b26.photo.store.qq.com/http_imgload.cgi?/rurl4_b=1c40bf08bd3e3162af563e2a69a4d3eb7fd0a48a607b6290c1fc0d15ea21e23d3d218b4d9cbb22d8254f92ba5ab7006f788de2b00c686f1ec69aa5716f5f64eee93527028dd62ec8f658732424f9a5a3d4e7aedc')" border="0" οnerrοr="this.src='http://cache.soso.com/img/blog/p1.gif'" src="http://b26.photo.store.qq.com/http_imgload.cgi?/rurl4_b=1c40bf08bd3e3162af563e2a69a4d3eb7fd0a48a607b6290c1fc0d15ea21e23d3d218b4d9cbb22d8254f92ba5ab7006f788de2b00c686f1ec69aa5716f5f64eee93527028dd62ec8f658732424f9a5a3d4e7aedc" width="411" οnlοad="addjustimg(this)" height="305"/><br/><br/> </a> <br/><br/> 在显示图像的过程中,如果把原始图像分成几个部分,对每一个部分都逐步放大其显示范围以接近各部分图像的宽度,那么运行时可实现门帘式的显示效果。改变循环语句的步长或者改变Sleep()函数中的参数就可以改变程序运行的时间。 <br/><br/> 门帘效果的实现代码如下: <br/><br/> unit Unit1; <br/><br/> interface <br/><br/> uses <br/><br/> Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, <br/><br/> Dialogs, StdCtrls, ExtCtrls, ExtDlgs; <br/><br/> type <br/><br/> TForm1 = class(TForm) <br/><br/> Image1: TImage; <br/><br/> btnOpen: TButton; <br/><br/> Image2: TImage; <br/><br/> OpenPictureDialog1: TOpenPictureDialog; <br/><br/> PaintBox1: TPaintBox; <br/><br/> procedure btnOpenClick(Sender: TObject); <br/><br/> procedure FormCreate(Sender: TObject); <br/><br/> private <br/><br/> { Private declarations } <br/><br/> public <br/><br/> { Public declarations } <br/><br/> end; <br/><br/> var <br/><br/> Form1: TForm1; <br/><br/> implementation <br/><br/> {$R *.dfm} <br/><br/> procedure TForm1.btnOpenClick(Sender: TObject); <br/><br/> var <br/><br/> i,j:Integer; <br/><br/> hDC1:HDC; <br/><br/> hDC2:HDC; <br/><br/> begin <br/><br/> if(self.OpenPictureDialog1.Execute()) then <br/><br/> begin <br/><br/> Image1.Picture.Bitmap.LoadFromFile(OpenPictureDialog1.FileName); <br/><br/> Image1.Visible:=true; <br/><br/> hDC1:=Image1.Canvas.Handle; <br/><br/> hDC2:=PaintBox1.Canvas.Handle; <br/><br/> for i:=0 to (Image1.Width div 10) do <br/><br/> begin <br/><br/> for j:=0 to 10 do <br/><br/> begin <br/><br/> BitBlt(hDC2,j*Image1.Width div 10,0,i+2,Image1.Height, <br/><br/> hDC1,j*Image1.Width div 10,0,SRCCOPY); <br/><br/> Sleep(10); <br/><br/> end; <br/><br/> end; <br/><br/> end; <br/><br/> end; <br/><br/> procedure TForm1.FormCreate(Sender: TObject); <br/><br/> begin <br/><br/> self.OpenPictureDialog1.Filter := 'BMP files (*.bmp)|*.bmp'; <br/><br/> end; <br/><br/> end. <br/><br/> 保存文件,然后按F9键运行程序。在程序运行的初始画面上单击“打开”按钮,弹出一个提示用户选择图像文件的“打开”对话框。确认选择后,在窗体的TPaintBox<em>组件</em>上就会显示图像的门帘效果,<em>特效</em>过程中间的显示如图所示 <br/><br/> <a style="CURSOR: pointer" target="_blank"><br/><br/> <img οnclick="window.open('file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/ksohtml/wps_clip_image-1492.png')" border="0" οnerrοr="this.src='http://cache.soso.com/img/blog/p1.gif'" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/ksohtml/wps_clip_image-1492.png" width="321" οnlοad="addjustimg(this)" height="291"/><br/><br/> </a> <br/><br/> 在BitBlt()函数的参数中,特别值得一提的是参数dwRop,它提供了源图与目标图的15种组合方式。但是一般都采用SRCCOPY,即把源图复制给目标图。读者如果可以灵活运用这个参数,就可以制作出更加丰富多彩的图像<em>特效</em> <br/><br/><script>
loadPreviewComment('17179567009214623600','http://user.qzone.qq.com/644979311/blog/1255444139',1,1,'main',2);
</script><h5 id="preview_tip">评论</h5>
<div id="geting_new" class="morepl preview_comment">正在加载评论......</div>
<div id="footer_br"><br/></div>
loadPreviewComment('17179567009214623600','http://user.qzone.qq.com/644979311/blog/1255444139',1,1,'main',2);
</script><h5 id="preview_tip">评论</h5>
<div id="geting_new" class="morepl preview_comment">正在加载评论......</div>
<div id="footer_br"><br/></div>