在TImage上画图的问题?(200分)

  • 主题发起人 主题发起人 nonflammable
  • 开始时间 开始时间
N

nonflammable

Unregistered / Unconfirmed
GUEST, unregistred user!
我要在TImage上画缩小的图,代码如下:
procedure PaintGraphic(SrcGraphic: TGraphic)
var
Bitmap1, Bitmap2: TBitmap;
begin
Image1.Picture.Graphic := TBitmap.Create;
Image1.Picture.Graphic.Height := 200;
Image1.Picture.Graphic.Width := 200;
TBitmap(Image1.Picture.Graphic).PixelFormat := pf24bit;
TBitmap(Image1.Picture.Graphic).Draw(0, 0, SrcGraphic);

Bitmap1.Assign(Image1.Picture.Graphic);

...部分代码,可能会改变Image1.Picture.Graphic...

Bitmap2.Assign(Bitmap1);
Image1.Picture.Graphic.Assign(Bitmap1);
Image1.Picture.Graphic.Height := 100;
Image1.Picture.Graphic.Width := 100;
Image1.Picture.Graphic.StretchDraw(Rect(0, 0, 100, 100), Bitmap2);
Bitmap2.Assign(Image1.Picture.Grapic);
end;

为什么执行了StretchDraw后Image1显示的图像不发生变化(只有背景变成白色)。
 
你需要刷新,在Image1.Picture.Graphic.StretchDraw(Rect(0, 0, 100, 100), Bitmap2);
后加入 :
Image1.Refresh;
 
你的代码有问题

为什么不直接设置 IMAGE的STRETCH呢?
 
to 卷起千堆雪tyn:
加了Refresh,无效。
to menxin:
image1.stretch属性仅改变了图的显示方式,而非图的内容。现在我需要改变图的内容,
在原问题中举的刚好是缩放的例子,其实还有将原图平铺的例子,这时仅通过原来image1的
属性就无法做到了。
 
自己建位图: bmp
bmp :=tbitmap.create;
bmp.StretchBlt(bmp.canvas.handle,0,0,100,100,bitmap2.canvas.handle,0,0,bitmap2.width,bitmap2.height,srccopy);
image1.picture.bitmap.assign(bmp);
bmp.free;
绝对正确!
 
接受答案了.
 
后退
顶部