問題:從 XE4 以來,Firemonkey 曲線繪圖在移動平台不平滑的問題一直令人诟病,提交到官方的 QC 也是族繁不及備載,官方似乎有意的避開這個問題,遲遲沒有修正。
適用版本:XE4 ~ Berlin 10.1 update 1 (查過官方源碼從 XE4 開始有 FMX.StrokeBuilder)
修正方法:
請將源碼 FMX.StrokeBuilder.pas 復制到自己的工程目錄裡,再進行修改。
unit FMX.StrokeBuilder; interface ...略... {+++>}var GlobeStrokeStepSize: Single = 1; // 全局變量:曲線平滑度(像素)by Aone @ 2016.10.12 implementation ...略... procedure TStrokeBuilder.BuildSolidPolygon(const Points: TPolygon; const Opacity: Single; BreakAtEnd: Boolean); ...略... {---> 刪除代碼下面三行代碼 by Aone @ 2016.10.12 StepSize := FThickness; // 曲線精密度,設定為前線寬(如果線越寬,畫出來的曲線就越粗糙) if StepSize < 2 then // 防止曲線精密度小於2 StepSize := 2; <---} {+++>}StepSize := GlobeStrokeStepSize; // 全局變量:曲線平滑度(像素)by Aone @ 2016.10.12 ...略... end;
效果:
例子下載(包含 Berlin 10.1.1 修正檔):
[修正]FMX_曲線平滑度_Berlin_10.1.1_Aone.zip
效能問題:
實機測試並沒有多大差別,應該說感覺不出來(除非一次大量繪制粗線條曲線才會有感覺)。
官方相關 QC 列舉幾個:
https://quality.embarcadero.com/browse/RSP-15819
https://quality.embarcadero.com/browse/RSP-15649
https://quality.embarcadero.com/browse/RSP-15709
https://quality.embarcadero.com/browse/RSP-15788
https://quality.embarcadero.com/browse/RSP-15649