按比例缩小图片(80分)

各位大哥大姐,小弟有一问题要请教一下。我从数据库的BLOB字段里读出一幅图片,但我并不知道它的尺寸有多大,现在我想先判断它的大小,如果超出预定尺寸,那么按比例缩小它。如果小于预定尺寸,那么按比例放大它。具体是怎么做呢,希望能给出源码,小弟不胜感激。

我从数据库中提取图片代码如下。
------------------------------
TempStream := TMemoryStream.Create;
TBlobField(ExDataSet.Fields['image']).SaveToStream(TempStream);
TempStream.Position := 0;
MyBmp := TBitmap.Create;
MyJpg := TJPEGImage.Create;
MyJpg.LoadFromStream(TempStream);
MyBmp.Assign(MyJpg);
FList.Add(MyBmp);
MyBmp.Free;
TempStream.Free;
--------------------------
现在我想要对MyBmp放大或缩小,具体怎么做呢,谢谢!
 
Flist是什么 ?
 
 
不好意思,那句可不要,这个是我把程序里面的东西全复制下来的,忘了把它删掉了。
它是TList类型,我是把这个图片对像地址存在FList里面的。
 
MyBmp.Width:=round(n*GetDeviceCaps(Canvas.Handle, LOGPIXELSY)/2.54 );//n厘米
MyBmp.Height:=round(m*GetDeviceCaps(Canvas.Handle, LOGPIXELSX)/2.54); //m厘米 

这样把图片大小定为长N厘米,宽M厘米
 
GetDeviceCaps(Canvas.Handle, LOGPIXELSY)/2.54 --> 垂直方向每厘米包含的像素数 
GetDeviceCaps(Canvas.Handle, LOGPIXELSX)/2.54 --> 水平方向每厘米包含的像素数
 
这个只能显示图片的部份,没有达到整体缩小的目的啊。
 //保存JPEG的缩略图 
procedure SavePicToMiniature(SourceFileName,DescFileName: String); 
const 
MaxWidth = 120 ;//最大宽度 
MaxHigth = 120 ;//最大高度 
var 
jpg: TJPEGImage; 
bmp: TBitmap; 
SourceJpg: TJPEGImage; 
Width, Height,tmpInt: Integer; 
begin 
try 
bmp := TBitmap.Create; 
SourceJpg := TJPEGImage.Create; 
Jpg:= TJPEGImage.Create; 
//读取源文件 
SourceJpg.LoadFromFile(SourceFileName); 
//计算缩小比例 
if SourceJpg.Width >= SourceJpg.Height then 
tmpInt := SourceJpg.Width div MaxWidth 
else 
tmpInt := SourceJpg.Height div MaxHigth ; 
Width := SourceJpg.Width div tmpInt ; 
Height := SourceJpg.Height div tmpInt ; 
//缩小 
bmp.Width := Width; 
bmp.Height := Height; 
bmp.PixelFormat := pf24bit; 
bmp.Canvas.StretchDraw(Rect(0,0,Width,Height), SourceJpg); 
//保存 
jpg.Assign(bmp); 
jpg.SaveToFile(DescFileName); 
finally 
bmp.Free; 
jpg.Free; 
SourceJpg.Free; 
end; 
end; 
 
原文地址:https://www.cnblogs.com/jijm123/p/14198295.html