Delphi XE下的FMX中压缩图片
2022-11-18 17:30:25 作者:admin

本文整理自网络,侵删。
用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; 相关阅读 >>
Delphi点击网页弹出的alert对话框的确定按钮
Delphi中判断某个文件是否已经打开
Delphi base64加解密
Delphi 无窗体无界面exe怎么做?
Delphi 如何检测你的电脑日期或时间的变化
Delphi如何获取硬盘所有的分区容量
Delphi 获取access中的表名
Delphi 调试ios时出现 please specify exact device preset uuid
Delphi之猥琐的webserver实现
Delphi 动态注册卸载ocx
更多相关阅读请进入《Delphi》频道 >>
猜你喜欢
联络方式:
400-123-789
邮箱:xiachao@163.com
Q Q:12345678
微信公众号
微信二维码
