关于bmp的困惑(50分)

  • 主题发起人 主题发起人 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;
Bitmap.LoadFromFile('F:/scr2/mid/2.bmp');
Form1.Canvas.CopyRect(MyOther,Bitmap.Canvas,MyRect);
finally
Bitmap.Free;
end;
end;

end.
 
Bitmap.Width/Height
 
可惜身边没有DELPHI,也不知道你这出错的情况怎样,要不可以帮你调试一下,问题主要在两个地方,要嘛就是矩形框的大小位置的问题,要嘛就是bitmap的canvas,copyrect我用过的,一点也不麻烦,不过我是在Timage的canvas上用的。
 
Bitmap.Width := ?
bitmap.height := ?

 
x,y有个屁用啊?
 
这段代码应当写在响应 WM_PAINT 的 OnPaint 函数里。
 
WM_CREATE消息后会有WM_PAINT;
RegisterClass
CreateWindow //WM_CREATE
ShowWindow
UpdateWindow //WM_PAINT
while(!GetMessage...
 
把代码写到窗体的 Paint 事件响应中去。
 
还是老问题嘛,把画图的代码都移到Canvas载体(比如Form,PaintBox等)的OnPaint事件
处理中去,你的程序在OnCreate中画了图,的确也画在Form上了,但紧接着窗口会自动调
用Refresh方法,然后激发OnPaint事件,由于你没处理这个事件,因此会缺省用背景色清
除窗口,你什么都没得到。
 
哈哈!转移你的代码至OnPaint中.
 
你的方法我试过了,一点也没有问题,你去看看是不是图片文件路径有错,还是剪下的矩形位置不太好,使你看不出来,而且矩形大小你可以放心做大一点,没有问题,与X,Y也没有关系,COPYRECT很好用的,没有必要用更复杂的办法。
 
多人接受答案了。
 
后退
顶部