【问题标题】:Snap to grid in millimeters on a panel?在面板上以毫米为单位对齐网格?
【发布时间】:2010-06-18 16:44:14
【问题描述】:

我有一个面板。我需要在WYSIWYG 中表示它。

现在,当在其上绘图时,可以使用毫米而不是像素进行绘图。

graphics.PageUnit = GraphicsUnit.Millimeter
graphics.DrawRectangle(pen,rect)

是否可以定位控件(按钮、文本框)也以毫米为单位,以获得面板的“真实”纸质图像?

在 VB6 中这是可能的。 .NET 是退步还是 VB6 只是使用了我们不想在 .NET 中使用的近似值?

【问题讨论】:

  • 为什么不采用 DPI 并将英寸转换为毫米?
  • 监控 DPI 会告诉您屏幕上每英寸有多少点(像素)。如果您希望测量结果正确,请取所需的毫米/25.4(转换为英寸)* DPI。这将告诉您需要多少像素。
  • 您能详细说明一下吗?我不需要以英寸为单位,但以毫米为单位,但是,问题仍然存在。比如说,我必须将一个文本框放置在距离上角 5x5 毫米处。 myTextBox.Location = ?? DPI 应该表示每英寸 DOTS,而不是每英寸 像素
  • 你说得对,毕竟我不相信这是可能的。 DPI 对打印很有用,虽然它可以用于屏幕布局,但我不相信你可以在不知道显示器的像素密度的情况下获得精确的测量结果。

标签: .net winforms gdi+


【解决方案1】:

很简单,如果不对您支持的每台显示器执行特定的数学运算,我认为这是不可能的。

DPI 通常用于打印,对于纸上的测量非常有用。但是,不能保证在显示器上进行测量,因为您可以随时更改分辨率并且仍然具有相同的 DPI(通常为 96)。除此之外,您还需要考虑显示器尺寸。

您需要了解特定显示器的 Pixel Density 或 PPI。我不相信这是可以得到的,尽管如果我错了其他人可以纠正我。

【讨论】:

  • 嗯。那又如何,VB6 比 VB.NET 更强大?
  • 在印刷尺寸或屏幕尺寸方面的测量应该准确吗?我不确定 VB6 究竟是如何工作的,但从我在 Google 上看到的情况来看,VB6 的测量结果仅适用于打印。
【解决方案2】:

试试这个:

var dpiX = Graphics.DpiX;//horizontal
var dpiY = Graphics.DpiY;//vertical

var mmX = (width_in_pixles * 25.4 ) / dpiX;
var mmY = (height_in_pixles * 25.4) / dpiY;

1 英寸有 25.4 毫米,因此使用上述公式可以计算控件的高度和宽度(以毫米为单位)并调整它们的位置。

【讨论】:

  • DPI 应表示每英寸 DOTS,而不是每英寸 像素
【解决方案3】:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2018-05-23
    • 1970-01-01
    • 2020-08-06
    • 2016-10-17
    • 1970-01-01
    • 2016-05-29
    相关资源
    最近更新 更多