实例16 图像的特效显示 2009年10月13日 第2章 图形图像处理实例 实例16 图像的显示 在Windows处理图像的API函数中,Bitblt()函数是非常重要而且是常用的函数之一。运用这个函数,可以实现图像的旋转和动态显示等效果。如果想在图像处理上有所突破,也必须熟练掌握Bitblt()函数。本实例实现的功能是以门帘效果来显示一幅BMP图像 向窗体上添加一个TImage、一个OpenPictureDialog、一个TPaintBox和一个TButton,TImage充当原图片显示的载体,TPaintBox用来显示图像的。添加后的窗体如图所示。 在显示图像的过程中,如果把原始图像分成几个部分,对每一个部分都逐步放大其显示范围以接近各部分图像的宽度,那么运行时可实现门帘式的显示效果。改变循环语句的步长或者改变Sleep()函数中的参数就可以改变程序运行的时间。 门帘效果的实现代码如下: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ExtDlgs; type TForm1 = class(TForm) Image1: TImage; btnOpen: TButton; Image2: TImage; OpenPictureDialog1: TOpenPictureDialog; PaintBox1: TPaintBox; procedure btnOpenClick(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.btnOpenClick(Sender: TObject); var i,j:Integer; hDC1:HDC; hDC2:HDC; begin if(self.OpenPictureDialog1.Execute()) then begin Image1.Picture.Bitmap.LoadFromFile(OpenPictureDialog1.FileName); Image1.Visible:=true; hDC1:=Image1.Canvas.Handle; hDC2:=PaintBox1.Canvas.Handle; for i:=0 to (Image1.Width div 10) do begin for j:=0 to 10 do begin BitBlt(hDC2,j*Image1.Width div 10,0,i+2,Image1.Height, hDC1,j*Image1.Width div 10,0,SRCCOPY); Sleep(10); end; end; end; end; procedure TForm1.FormCreate(Sender: TObject); begin self.OpenPictureDialog1.Filter := 'BMP files (*.bmp)|*.bmp'; end; end. 保存文件,然后按F9键运行程序。在程序运行的初始画面上单击“打开”按钮,弹出一个提示用户选择图像文件的“打开”对话框。确认选择后,在窗体的TPaintBox上就会显示图像的门帘效果,过程中间的显示如图所示 在BitBlt()函数的参数中,特别值得一提的是参数dwRop,它提供了源图与目标图的15种组合方式。但是一般都采用SRCCOPY,即把源图复制给目标图。读者如果可以灵活运用这个参数,就可以制作出更加丰富多彩的图像 评论
正在加载评论......
正在加载评论......