Delphi XE下的FMX中压缩图片


本文整理自网络,侵删。

 
用FMX压缩图片,发现FMX里的canvas没有draw,stretch,cliprect类,FMX里程序创建时会自动引用FMX.Graphics,
而这个单元内的TBitmap类的Canvas没有StretchDraw属性,也没有ClipRect类,所以定义TBitmap的图片不能裁剪。
而在VCL里,同样的方法却可以裁剪,原因在于vcl里引用的是vcl.graphics,引用单元不一样,平台不一样.
解决方法:把FMX里自身引用的FMX.Graphics删掉,换成VCL.Graphics.
XE里的FMX是跨平台的,delphi7是Windows用的,我想应该是windows上面有的东西别的平台不一定有,所以引用的单元也就不同,设计人员这么分也是有他的道理的,虽然我不知道他的用意。。
FMX和VCL区别很大,比如说以前用ExtractFilePath(application.Exename)来获取当前程序路径,而现在MFX里applicatin没有Exename属性,哈哈,怎么办呢,
别急,总会有办法的,ExtractFilePath(ParamStr(0))和GetCurrentDir+'\'都可以获取当前路径。
 

uses
    Vcl.Imaging.jpeg, Vcl.Graphcis;
 var
  jpg: TJpegImage;
  bmp: TBitmap;
begin
  jpg := TJpegImage.Create;
  bmp := TBitmap.Create;
  jpg.LoadFromFile('d:/test.jpg');
  bmp.Width := jpg.Width;              //宽度和高度可以自己设
  bmp.Height:= jpg.Height;
  bmp.Canvas.StretchDraw(bmp.Canvas.ClipRect, jpg);
  jpg.Assign(bmp);
  jpg.CompressionQuality := 10;       //压缩大小可调整
  jpg.Compress;
  jpg.SaveToFile('d:/aa.jpg');        //保存压缩后的图片,或者draw在Form上 
  bmp.Free;
  jpg.Free;
end; 
 
还有BeginUpdata;和EndUpdata;VCL和FMX也是不一样的,不过可以直接用就行。
这个只是压缩jpg格式的,png不行,会出现jpeg error #53错误,
如果是jpg出现这个错误,可能是因为文件太大,格式修改过,文件名是中文问题,需要解码。
可以前面加个if ExtractFileExt(fn) = '.jpg' then begin  end;

相关阅读 >>

Delphiwindows 下编译 exe 文件时把一个外部 txt 文件编译到 exe 里面

github上通过星级评估排名前10的最受欢迎的开源Delphi项目

Delphi deletefile 删除文件

Delphi的几种类型转换

Delphi 另类计算程序代码运行耗时

Delphi 双击tmemo选择光标所在行

Delphi link() 精简打开网址

Delphi实现票据精确打印

android : assets与res/raw资源目录的区别

Delphi 让scrollbox响应鼠标的滚动消息

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...

    正在狠努力加载,请稍候...