Перейти к содержанию
Fire Monkey от А до Я
  • 0

Горизонтальная линия в целых координатах рисуется двойной


Geex

Вопрос

Приветствую!

Не понятная ситуация с шириной линии. Рисую горизонтальную линию на канве толщиной толщиной 1 пиксель. 

Если линия лежит вдоль целых координат, например Y=100 то толщина линии реально получается 2 пикселя.

А если координаты дробные, например 50.5 то линия в один пиксель. Вот как это выглядит:

post-145-0-29967500-1398688559_thumb.png

Т.е. я так понимаю, что координаты канвы начинаются не с нуля, а с 0.5.

Как сделать чтобы отображение целых координат было точно в пиксель?

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Спасибо!

 

Задача решена, через вычитание из координат половины толщины пера 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 .

Ссылка на комментарий
Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...