想把图片放大成长宽各两倍,这样的过程怎么会运行不了?(50分)

  • 主题发起人 主题发起人 feng1234
  • 开始时间 开始时间
F

feng1234

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.Button1Click(Sender: TObject);
var
mm:Trect;
mybit:Tbitmap;
begin

mybit.Create;
mybit.Assign(image1.Picture.Bitmap);
image1.Width:=image1.Width*2;
image1.Height:=image1.Height*2;
mm:=image1.ClientRect;
image1.Canvas.StretchDraw(mm,mybit);
end;
stretchdraw的意思是不是把mybit这个图像画到image1的mm这个矩形里面?
 
不要用stretchdraw,用CopyRect方法;
 
阿,居然没人能帮我:(
 
楼主,你看了帖子没有,给了你回答为什么不去试试?
 
恩,一会我试试看吧

但是很多书上都说用stretchdraw很有用的
 
在Delphi帮助里:
NOTE: Do not use StretchDraw for bitmaps, instead use PrintBitmap or PrintBitmapRect.
 
将图片转换成BitMap,然后放大一倍,在Image控件中显示。
 
将图片转换成BitMap,然后放大一倍,在Image控件中显示。
mybit:=Tbitmap.Create;
mybit.Assign(image1.Picture.Bitmap);
mybit.Width:=2*image1.Width;
mybit.Height:=2*image1.Height;
image1.Picture.Bitmap.Assign(mybit);
是这样吗?我得image1得autosize是true 阿,

但是效果是图片还是那么大,周围多出白色得区域?
 
procedure TForm1.Button1Click(Sender: TObject);
var
ABmp: TBitmap;
begin
ABmp := TBitmap.Create;
try
ABmp.Width := Image1.Width;
ABmp.Height := Image1.Height;
ABmp.Canvas.CopyRect(Rect(0, 0, Image1.Width, Image1.Height),
Image1.Canvas,
Rect(0, 0, ABmp.Width div 2, ABmp.Height div 2));
Image1.Picture.Assign(ABmp);
finally
ABmp.Free;
end;
end;
 
最关键得问题,image1得显示区域似乎不能有下面两句话在程序里动态控制
image1.Width:=2*image1.Width;
image1.Height:=2*image1.Height;
在你那段程序中插入这样两句话
然后把那个位图对象中得矩形拷贝到image1里面
并没有看到image1变成原来得4倍大?
 
image1.Width:=2*image1.Width;
image1.Height:=2*image1.Height;
这两句话只是改变了图形的大小,并没有缩放图形内容。

 
是阿,可是我先把大小改了

然后在把bitmap中的内容拷贝过来,也没有主动填满image1?怎么回事那?
 
你到Graphics单元看看TCanvas的源码,
CopyRect调用的是API函数StretchBlt,而StretchDraw调用的是TGraphic的
Draw方法,TBitmap的Draw方法也是调用StretchBlt,按道理是应该一样的;

你的程序中,有问题的是这一句:mybit.Assign(image1.Picture.Bitmap);
image1中的Bitmap显示在image1上时本身有一个转换的过程。
 
procedure DoIncreaseImage(ABmp: TBitmap);
var
T: TBitmap;
begin
T := TBitmap.Create;
try
T.Assign(ABmp);
ABmp.Width := ABmp.Width * 2;
ABmp.Height := ABmp.Height * 2;
ABmp.Canvas.StretchDraw(
Rect(0, 0, ABmp.Width, ABmp.Height), T);
finally
T.Free;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
DoIncreaseImage(Image1.Picture.Bitmap);
end;
 

Similar threads

后退
顶部