怎样把任意大小的图片缩放为90*90大小的图片并保存下来。(100分)

  • 主题发起人 主题发起人 hlsoft
  • 开始时间 开始时间
H

hlsoft

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样把任意大小的图片缩放为90*90大小的图片并保存下来。
关键是 保存后的图形文件要为90*90。希望提供详细源码。
 
Var B:Tbitmap; //临时位图
Begin
B:=Tbitmap.Create; //建立临时位图
With B do
Begin
Width:=90; //临时位图的大小为90x90
Height:=90;
End;
B.canvas.StretchDraw(B.canvas.Cliprect,YourBitmap); //缩放适应
B.SavetoFile(YourFileName); //保存
B.Free;
End; //搞定 来分


 

记得有个截图工具可以的,好像是:Hypersnap.
 
StretchDraw
 
对StretchDraw
 
被人枪先了!
 
To GGCAT
你的方法有些问题。原来是16M色的图片经过转换后变成了64K色,图象出现了失真!
 
原来你的桌面用的是 65536 色的呀,不好意思;

加一句在 B:=Tbitmap.Create 后面:
B.PixelFormat:=pf24bit;
行了。
 
其实GGCAT的方法是可以的,用DIB的StretchDraw。不过有几个问题:一是90X90不能保证与原图
的比例相同,我建议你使用不超过某种尺寸的矩形好一些。二是保存为bmp是不是很合算。
我的方法是使用现成的带源码的控件。我手头就有一个,我一直用。ImageEn。
它有一个方法就是Resize(W, H)。
 
to GCCAT
用了你的方法后都变成了16M色。我的要求是:图片原来是什么色彩的,缩放后还是什么色彩。
 
好久不见,稀客稀客。

>> 你的方法有些问题。原来是16M色的图片经过转换后变成了64K色,图象出现了失真!

相必你所指的失真是图片上出现了一些条纹和锯齿吧?
这不是由于颜色引起的,而是由于缩小后的像素丢失引起。想要
很平滑的缩小放大,必须自己对位图像素进行均值计算,而且
对于索引色的位图更麻烦(因为计算出的颜色可能不存在于色表中);
固然,我一开始给的程序也有问题
B:=Tbitmap.Create; //建立临时位图
此时B 的像素格式是对应 屏幕当前像素格式的,可能和原图不符。
可以加上一句,
B.Assign(YourBitmap);
这样就相同了,

而缩小后平滑的问题,就不是个简单的问题了。

 
我指的失真的确是图象颜色上的失真。
你说“在B:=Tbitmap.Create 后面:加上B.PixelFormat:=pf24bit;”会使所有图片颜色
都变为16M色。
我的要求是:图片原来是什么[色彩]的,缩放后还是什么[色彩]。要保持图片原来的颜色。

 
Var B:Tbitmap; //临时位图
Begin
B:=Tbitmap.Create; //建立临时位图
B.Assign(YourBitmap); //采用相同色彩深度
With B do
Begin
Width:=90; //临时位图的大小为90x90
Height:=90;
End;
B.canvas.StretchDraw(B.canvas.Cliprect,YourBitmap); //缩放适应
B.SavetoFile(YourFileName); //保存
B.Free;
End; //搞定

 
基本同意GGCAT。不过应加入try...finally结构提高安全性。
var ...
begin
B := TBitmap.Create;
try
...
B.SaveToFile(YourFileName);
finally
B.Free;
end;
end;
 
var
Bmp : TBitmap;
begin
Bmp := TBitmap.Create;
Bmp.Assign(YourBmp); //继承你的位图信息,包括宽度和高度
Bmp.Canvas.StretchDraw(Rect(0,0,90,90),Bmp);
Bmp.SaveToFile(YourFile);
Bmp.Free;
end;
 
接受答案了.
 
你们他妈的统统都是放屁,操,老子一个都不能用,害得我浪费半天时间,干
 
真的不能用吗?
我试试~~~~
 
不好意思,那天可能是失恋了,心情不太好,看看有点不好意思,偶平时不样的,真的
 
后退
顶部