用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;