• 按比例缩小图片(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; 
     
  • 相关阅读:
    车载以太网 doip someip
    pytest
    lauterbach
    django
    django info
    Linux上加了kdb,softlock
    jenkins war
    Ubuntu 编译安装 Python3.6.8 没有正确编译 sqlite3 的问题
    HTB靶场记录之Bank
    HTB靶场记录之SolidState
  • 原文地址:https://www.cnblogs.com/jijm123/p/14198295.html
Copyright © 2020-2023  润新知