按比例缩小图片(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; 
 

posted on   癫狂编程  阅读(413)  评论(0编辑  收藏  举报

编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
历史上的今天:
2018-12-27 如何实时获取DBGrid 中当前单元格输入的内容?
2018-12-27 ADO.NET中DataSet、DataTable、DataRow的数据复制方法
2018-12-27 Delphi Dataset CurValue

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
好的代码像粥一样,都是用时间熬出来的
点击右上角即可分享
微信分享提示