【问题标题】:Firemonkey XE6:How to use the full resolution on my adroiddevice?Firemonkey XE6:如何在我的安卓设备上使用全分辨率?
【发布时间】:2014-05-12 12:48:47
【问题描述】:

我正在构建一个 Firmonkey 移动应用程序。

我有一部手机 (Galaxy S3)。该设备的绝对分辨率为 1280 x 720。 当我要求 canvas.width 时,我得到 640x360。 我知道 Scale 是绝对坚决和画布大小之间的联系。

我的问题。 当我在画布上用thickness := 1 画一条线时,我希望这条线尽可能细。

如果我这样做:

if Self.Canvas.BeginScene then
    try
      Self.Canvas.Stroke.Thickness := 1;
      Self.Canvas.Stroke.Kind := TBrushKind.Solid;
      Self.Canvas.Fill.Color := TAlphaColorRec.Black;
      Self.Canvas.Fill.Kind := TBrushKind.Solid;
      for I := 1 to 20 do
        Self.Canvas.DrawLine(PointF((I * 30), 0), PointF((I * 20), ClientHeight), 1);
    finally
      Self.Canvas.Canvas.EndScene;
    end;

这些线条在我的显示器上不会同样“细”。如果编译到 Windows,它可以正常工作。

进一步:如果我想显示尺寸与我的设备绝对分辨率 (1280x780) 完全匹配的图片,那么这张图片不会显示完美,而是调整为较低的分辨率(等于画布)...

那么到底如何让我的画布访问我设备上的每个像素,这样我就可以自己控制每个像素???

我去过的页面:http://www.fmxexpress.com/perfect-line-thickness-using-tcanvas-drawline-with-delphi-xe5-firemonkey-on-android-and-ios/ 但这是一个炒锅(不起作用)。我不帮助获取/使用绝对分辨率。

【问题讨论】:

  • 在 Z1 上它的全高清...你甚至不能创建全高清格式...wth?
  • 不明白你的问题。我想拥有设备的分辨率,而不仅仅是 Firemonkeycanvas 给我的较低分辨率。如果绘制一条粗细为 := 1 的线,那么在我的 android 设备上,它没有设备可以绘制的那么细。可能是 2 或 3 像素...
  • 这似乎基本上是不可能的...您可以将form with and height设置为fullhd,但是缩小尺寸可能会出现问题...

标签: android delphi firemonkey


【解决方案1】:

在您的情况下,Canvas.Scale 为 2。由于无法设置 Canvas.Scale,因此可以使用本机设备分辨率进行绘制,使用 Canvas.SetMatrix 反转缩放。

Canvas.SetMatrix(TMatrix.CreateScaling(1 / Canvas.Scale, 1 / Canvas.Scale) * Canvas.Matrix);

之后,您将以本机设备分辨率进行绘制。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多