各位大哥大姐,小弟有一问题要请教一下。我从数据库的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放大或缩小,具体怎么做呢,谢谢!
我从数据库中提取图片代码如下。
------------------------------
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里面的。
它是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厘米
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 --> 水平方向每厘米包含的像素数
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;
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;