请问如何在主窗口显示图象(200分)

  • 主题发起人 主题发起人 jonson
  • 开始时间 开始时间
J

jonson

Unregistered / Unconfirmed
GUEST, unregistred user!
请问如何在主窗口显示图象
 
请问如何在MDI主窗口显示图象
 
在网上找一本叫DELPHI4参考手册DOC格式的,只要是有书下载的都应该有,那里有
还有许多其他的技巧
 
请问如何在MDI主窗口显示jpg图象
 
到看看:
http://member.netease.com/~bozhi/
 
有很有控件和技巧,你可以在以前的问题中找到。
 
1.在Form中添加Image控件,名字为IMG_BK,然后设一个BMP图象;
2.在Form的Create事件中写入 Self.brush.bitmap:=img_bk.picture.bitmap;
注意,这招在win98中有用,win95好像不行。
 
试一小刀,基本上可以用Form上的Canvas来作,
基本思路大概是
1。先创建一个Tbitmap
2。然后在用From.Canvas.Draw(x,y,tbitmap.canvas)来画。

我这里有篇文章希望对你有所帮助!

发信人: icecream (会说话的哑巴), 信区: Delphi
标 题: Delphi中图像的像素级操作
发信站: 武汉白云黄鹤站 (Wed Apr 12 08:30:14 2000), 站内信件


李莹
一般的可视性编程语言,如VB本身只具有图像的一般显示功能, 加上简单的图像伸缩处理
, 在进行一些图像复杂的特技显示时必须借助于Windows的有关API 函数。但Delphi为用
户提供了更为完善的图像处理能力, 依靠它本身的功能完全可以实现图像的像素级操作
。本文介绍了Delphi中像素级图像操作的基本原理、应用和实例。
一、基本原理
在Delphi中有很多控件具有CANVAS属性, 即所谓的画布, 利用这一属性可以在控件的表
面进行图形图像处理工作, 其中有一个CopyRect命令, 具体参数格式:
Copyrect(Dest:TRect;Canvas:Tcanvas;Source:TRect);
其中:Dest:目标画布矩形 Canvas:源画布 Source:源矩形,其功能是把图像从一个源矩形
RECT内,复制到目标矩形RECT内, 复制的图像具有自动伸缩性质。从这个命令的表面看只
能进行图像的全部或部分复制功能,其实如果把矩形RECT定义成只有一个像素大小, 即可
以从源图像中取出一个像素点, 即进行图像的像素级操作, 比如:Rect(0,0,1,1)可指定
某图像源的左上角第一个像素。
二、像素级操作的应用
图像的像素级操作可广泛应用在图像的特技显示效果制作工作中, 并且可以实现较为复
杂的图像处理工作, 举例如下:
1.图像的旋转: 在Delphi中利用其他方法显示图像时,比如利用图像框IMAGE 或者DRAW命
令, 只能按原图的方向显示, 进行图像的旋转显示必须以像素为单位进行处理,重新安排
像素的排列位置, 比如按先横向后纵向的方式读取原图像,然后按先纵向后横向的方式
写像素,最终将形成旋转90度的图像,按同样的原理可形成旋转180度或270度的图像。
2.图像尺寸的改变: 图像尺寸的改变在Windows 中好象并不需要像素级操作, 利用图像
框的伸缩性可以简单地完成这一工作, 但利用像素操作改变图像尺寸是图像放大或缩小
操作的根本, 并且可以具有更高的精确和更高的灵活性。比如横纵向均每隔一点取一像
素, 连续写在目标画布上, 即可使图像缩小到原来的四分之一;而读出一点像素后, 在
目标画布上连续写两点以上, 即可实现图像的放大显示。
3.图像的多次抽点显示: 如果对一个图像第一次均匀地显示其中的一些像素点, 形成模
糊的图像轮廓, 然后逐渐再显示一些像素点, 使图像逐渐清晰, 最终显示完整的图像,
将是一种美观的图像显示效果; 同样利用相反的操作, 在一个图像上逐渐写上与图像底
色相同的点, 使图像逐渐模糊, 最终消失, 这也是像素操作的巧妙利用。
4.图像的镜像形成: 镜像即原图像的反射效果, 有水平和垂直镜像之分, 镜像的形成比
较简单, 一般只需要对称交换一个图像的左右或上下像素即可, 所以严格的说,实现此操
作不需要像素操作, 而使用“像素条”操作就可以了, 具体方法是从源图像的一个边缘
开始定义宽度为1 的素条, 然后在目标画布的另一边缘位置向相反方向写,这样可形成满
意的镜像。
三、演示程序
下面的程序需要在窗体From1 内安放五个Button和一个OpenDialog, 然后按下述程序在
相应事件中填入程序代码,此程序运行之后, 需要通过按钮5 选择一个BMP位图文件,之后
按钮1实现图像的旋转变换, 按钮2 实现图像抽点显示, 分四次逐渐显示出完整图像,按
钮3实现图像的缩小显示, 按钮4实现图像的镜像显示。以上程序在Windows 95、Delphi
2.0环境下通过。
//定义变量
var
Form1: TForm1;
bitmap:tbitmap;
i,j,m,n,numm:integer;
rect1,rect2,rect3:trect;
//建立Bitmap
procedure TForm1.FormActivate(Sender: TObject);
begin
bitmap:=tbitmap.create;
OpenDialog1.filter:='Bitmap file(*.bmp)|*.bmp';
end;
// 旋转显示
procedure TForm1.Button1Click(Sender: TObject);
begin
form1.repaint;
for j:=0 to bitmap.height do
for i:=0 to bitmap.width do
begin
with rect1 do
begin
left:=i;
top:=j;
right:=i+1;
bottom:=j+1;
end;
with rect3 do
begin
left:=j;
top:=i;
right:=j+1;
bottom:=i+1;
end;

canvas.copyrect(rect3,bitmap.canvas,rect1);

end;

end;

//抽点逐渐显示

procedure TForm1.Button2Click(Sender: TObject);

begin

form1.repaint;

for n:=0 to 1 do

for m:=0 to 1 do

for j:=0 to bitmap.height div 2 do

for i:=0 to bitmap.width div 2 do

begin

with rect1 do

begin

left:=2*i+m;

top:=2*j+n;

right:=2*i+1+m;

bottom:=2*j+1+n;

end;

with rect3 do

begin

left:=2*i+m;

top:=2*j+n;

right:=2*i+1+m;

bottom:=2*j+1+n;

end;

canvas.copyrect(rect3,bitmap.canvas,rect1);

end;

end;

//缩小四分之一

procedure TForm1.Button3Click(Sender: TObject);

begin

form1.repaint;

for j:=0 to bitmap.height div 2 do

for i:=0 to bitmap.width div 2 do

begin

with rect1 do

begin

left:=2*i;

top:=2*j;

right:=2*i+1;

bottom:=2*j+1;

end;

with rect3 do

begin

left:=i;

top:=j;

right:=i+1;

bottom:=j+1;

end;

canvas.copyrect(rect3,bitmap.canvas,rect1);

end;

end;

//镜像显示

procedure TForm1.Button4Click(Sender: TObject);

begin

form1.repaint;

for i:=0 to bitmap.width do

begin

with rect1 do

begin

left:=i;

top:=0;

right:=i+1;

bottom:=bitmap.height;

end;

with rect2 do

begin

left:=(bitmap.width)-i-1;

top:=0;

right:=(bitmap.width)-i;

bottom:=bitmap.height;

end;

canvas.copyrect(rect2,bitmap.canvas,rect1);



end;

end;

//打开图像文件

procedure TForm1.Button5Click(Sender: TObject);

begin

if OpenDialog1.Execute then

bitmap.loadfromfile(OpenDialog1.filename);

Form1.Canvas.Draw(0,0, Bitmap);

end;



--

 
很简单:
procedure TForm1.Button1Click(Sender: TObject);
var
bmp:TBitMap;
begin
bmp:=TBitMap.Create;
bmp.LoadFromFile('安装程序.bmp');
Canvas.Draw(0,0,bmp);
end;

若要缩放图像
procedure TForm1.Button2Click(Sender: TObject);
var
bmp:TBitMap;
dRect,sRect:TRect;
begin
bmp:=TBitMap.Create;
bmp.LoadFromFile('安装程序.bmp');
sRect:=Rect(0,0,bmp.Width,bmp.Height);
dRect:=Rect(0,0,Form1.Width,Form1.Height);
Form1.Canvas.CopyRect(dRect,bmp.Canvas,sRect);
end;
 
多人接受答案了。
 
后退
顶部