Geex
-
Постов
4 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные Geex
-
-
В статье описаны проблемы с Андроидом, а тут Windows 7.
Не понятно почему вообще такое получается, бред какой-то.
-
Спасибо!
Задача решена, через вычитание из координат половины толщины пера Canvas.Stroke.Thickness / 2, очень грубо, как здесь:
procedure TForm2.FormPaint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); var I: Integer; begin if Canvas.BeginScene then try Canvas.Stroke.Thickness := 1.5; Canvas.Stroke.Kind := TBrushKind.bkSolid; Canvas.Fill.Color := TAlphaColorRec.Black; Canvas.Fill.Kind := TBrushKind.bkSolid; for I := 1 to 9 do begin Canvas.DrawLine(PointF(50 + I * 25 - (Canvas.Stroke.Thickness / 2), 0), PointF(50 + I * 25 - (Canvas.Stroke.Thickness / 2), ClientHeight), 1); end; finally Canvas.EndScene; end; end;
К сожалению через функцию RoundLogicPointsToMatchPixel не получилось:
function TForm2.RoundLogicPointsToMatchPixel(const LogicPoints: Single; const AtLeastOnePixel: Boolean = False): Single; var ws: IFMXWindowService; ScreenScale, Pixels: Single; begin ws := TPlatformServices.Current.GetPlatformService(IFMXWindowService) as IFMXWindowService; ScreenScale := ws.GetWindowScale(Self); // Maybe you will want to use Ceil or Trunc instead of Round Pixels := Round(LogicPoints * ScreenScale); if (Pixels < 1) and (AtLeastOnePixel) then Pixels := 1.0; Result := Pixels / ScreenScale; end;
Так как LogicPoints=ScreenScale=1 .
-
Приветствую!
Не понятная ситуация с шириной линии. Рисую горизонтальную линию на канве толщиной толщиной 1 пиксель.
Если линия лежит вдоль целых координат, например Y=100 то толщина линии реально получается 2 пикселя.
А если координаты дробные, например 50.5 то линия в один пиксель. Вот как это выглядит:
Т.е. я так понимаю, что координаты канвы начинаются не с нуля, а с 0.5.
Как сделать чтобы отображение целых координат было точно в пиксель?
Странное отображение DrawPath
в Ломанная линия
Опубликовано
Привет, Всем!
Заметил странности отображения ломанных линий с помощью DrawPath. При острых углах ломанной она начинает выходить за координаты точек излома. Как на рисунке:
Красным цветом построена линия с помощью DrawLine, зеленой с помощью DrawPath по одним и тем же координатам.
Можно заметить что зеленая линия немножко выходит за красную. Этого можно избежать только если строить линию с разрывами.
Подозреваю что это связано с радиусом загиба кривой, вот только где его убрать?
Можно как-нибудь элегантно сделать чтобы кривая линия строилась точно по координатам с помощью DrawPath?