为何无法显示bmp? (100分)

  • 主题发起人 主题发起人 LEYT8
  • 开始时间 开始时间
L

LEYT8

Unregistered / Unconfirmed
GUEST, unregistred user!
下面的程序已编译通过,但就是无法显示图片,不知是何原因?


unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
Bitmap: TBitmap;
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
var
x, y: Integer;
MyRect, MyOther: TRect;
begin
try
x:=0;y:=0;
MyRect := Rect(0,0,100,100);
MyOther := Rect(0,0,100, 100);
Bitmap := TBitmap.Create;
Form1.Canvas.CopyMode:=cmblackness;
Bitmap.LoadFromFile('F:/scr2/mid/2.bmp');
Form1.Canvas.BrushCopy(MyRect,Bitmap, MyRect, clBlack);
Form1.Canvas.CopyRect(MyOther,Bitmap.Canvas,MyRect);
Form1.Canvas.stretchdraw(MyRect,Bitmap);
Canvas.Draw(x, y, Bitmap);
finally
Bitmap.Free;
end;
end;

end.
 
>>Bitmap.LoadFromFile('F:/scr2/mid/2.bmp');
文件有没有放在了那儿?
 
兄台:
我看关键是你的copymode设置不正确!
copymode决定了画布如何从另一个画布中复制图像给自己。
Form1.Canvas.CopyMode:=cmblackness;
这样的话,目标窗口会是black。
察看帮助:
cmblackness: Fills the destination rectangle on the canvas with black.
所以,最好修改一下你的copymode.
(加分吧。。。嘿嘿。嘿嘿)
 
不是这个原因。
其实你的图已经画出来了。但是在FormCreate以后,窗口会自动调用一次Refresh/paint,
因此你画的图又被擦掉了。你把读bmp文件的代码留在FormCreate中,把画bmp的代码写在
OnPaint中就可以了。
 
xiuguo和吕雪松说的都有道理,综合起来就好了,CopyMode不能设为cmBlackness,试试cmSrcCopy
就好了,而如果你不把写图的代码加到OnPaint事件中的话,窗体一刷新,图就没有了。
我在想,你为什么不用一个TImage来装图片呢,这样不是省了很多麻烦吗?
 
接受答案了.
 
后退
顶部