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;

 
相關文章
相關標籤/搜索