如何无级缩放一个图片?(50分)

  • 主题发起人 主题发起人 question
  • 开始时间 开始时间
Q

question

Unregistered / Unconfirmed
GUEST, unregistred user!
如何等比缩小一个图形,如以前的是 1024*768,
我输入一个参数如:800 它就自动保存为 800*600 的图片?
急。
 
如果是显示的话,你可以用RectCopy来使用,估计你拷贝了以后可以存成文件
 
哪位指点一下?
 
从某个角度说,这是图象处理领域内没有完全解决的问题,
关键是看你对保持图象细节的要求。

一般WINDOWS GUI是用直接抽线实现的,也就是隔一定距离
丢一条线。如果恰好这里是图象中的一条线,则图象看起来
完全变样了。

较通用的办法是重采样的方法。有双线性采样、双二次采样
和双三次采样等,算法并不是特别简单,但也不特别复杂,
可以参考一些图象处理书籍。

如果对图象细节的保留有特殊要求,就不能用通常的方法实
现了。有很多人在研究这个问题,因为生产图象设备和软件
的公司非常需要这些东西。如果你有好的算法,就可以卖大
价钱。
 
若对图像质量要求不很高,可以:
var
Bmp1,Bmp2:TBitmap;//Bmp1是提原图,Bmp2是变化为宽800的小图
begin
Bmp1=TBitmap.create;
Bmp2=TBitmap.create;
Bmp1.LoadFromFile('...');
Bmp2.PixelFormat =Bmp1.PixelFormat ;
Bmp2.Width=800;
Bmp2.Height =round(Bmp2.Width*Bmp1.Height/Bmp1.Width);
Bmp2.Canvas.StretchDraw(Bounds(0,0, Bmp2.Width,Bmp2.Height),
Bmp1);
Bmp2.SaveToFile('d:/temp.bmp');
end;
 
图片的无级缩放......组件可搞定
http://www.nease.net/~glowing/d_comp/zoompic.zip
适用于Delphi3 - 5
 
多人接受答案了。
 
后退
顶部