图象的缩放(50分)

  • 主题发起人 主题发起人 shlgz
  • 开始时间 开始时间
S

shlgz

Unregistered / Unconfirmed
GUEST, unregistred user!
我想将一个大的图片缩小,就同ACDSEE一样可以缩小观看,请各位大虾指点一二!
 
Image1.Stretch:=True;
然后就是设置IMAGE1的大小问题了。
 
CopyRect
BitBlt等函数
好像以前讨论很多了
 
图象的缩放一般是用BITBLT来实现的。

BitBlt(Dst.Canvas.Handle,0,0,Dst.Width,Dst.Height,Src.Canvas.Handle,0,0,SRCCOPY);
//Dst,Src为目标位图和原始位图
//只需要改变Dst.Width 和 Dst.Height就可以改变位图的大小
 
var
t:tbitmap;
dest_rect,sour_rect:trect;
bottom,right:integer;
begin
t:=tbitmap.Create;
try
t.LoadFromFile('c:/main.bmp');
dest_rect.TopLeft:=point(0,0); //目标RECT的TOPLEFT,BOTTOMRIGHT你可以随便改。
dest_rect.BottomRight:=point(strtoint(formatfloat('0',t.width*2)),strtoint(formatfloat('0',t.height*1.5)));
sour_rect.TopLeft:=point(0,0);
sour_rect.BottomRight:=point(t.width,t.height);
image1.Canvas.CopyRect(dest_rect,t.canvas,sour_rect);
image1.Picture.SaveToFile('c:/t.bmp');
finally
t.free;
end;
//随便找张图片放到c:/试试吧。
 
to 卷起千堆雪tyn:
缩放应该用StretchBlt而不是BitBlt:

BOOL StretchBlt(

HDC hdcDest, // handle of destination device context
int nXOriginDest, // x-coordinate of upper-left corner of dest. rect.
int nYOriginDest, // y-coordinate of upper-left corner of dest. rect.
int nWidthDest, // width of destination rectangle
int nHeightDest, // height of destination rectangle
HDC hdcSrc, // handle of source device context
int nXOriginSrc, // x-coordinate of upper-left corner of source rectangle
int nYOriginSrc, // y-coordinate of upper-left corner of source rectangle
int nWidthSrc, // width of source rectangle
int nHeightSrc, // height of source rectangle
DWORD dwRop // raster operation code
);
 
Canvas.CopyRect() is very cool!
 
非常感谢大家![:)][:)][blue][/blue]
 
后退
顶部