0

我正在开发一个“打印预览”工具,以显示一张幻灯片的概览,上面有矩形阵列的样本点。

载玻片的尺寸通常为 25 x 75 毫米,点样的直径通常为 0.1 毫米。载玻片周边通常有 2 毫米的间隙,没有打印任何点。

点(间距)之间的距离精确到0.01mm。例如,0.20 和 0.29 毫米的间距需要在像素中进行区分。代表斑点本身,100% 的准确性在这个阶段可能并不重要,只要斑点是可见的并且不重叠。

我将不胜感激有关使用哪些技术来创建幻灯片/点的位图表示并使用任意放大倍率查看幻灯片布局的建议。

这不必很复杂 - 1:1 的表示加上越来越大的放大倍率开始。我可能不能缩小太多,因为这些点会变得太小而无法表示。

对于更大的放大倍率,我可能还需要了解如何实现水平/垂直滚动控件,但我稍后会解决这个问题。

我想了解我应该了解的任何编程和缩放技术,以便正确实现缩放工具。我最近一直在使用 StretchBlt 函数来更改图像大小,看起来还可以,但是任何其他相关信息都会很有用。

干杯。

4

1 回答 1

1

让我们从头开始:

  • 为什么不使用 ::AFXPrintPreview() 和 MFC 的其他打印预览工具?

  • 我认为“幻灯片”和“点”特定于您的行业 - 它们与问题相关还是仅用于说明?

  • StretchBlt() 不会对您有多大好处,因为它只会让您进行像素级“缩放”,您需要以更高的精度绘制控件的某个部分。即使你不打算使用 MFC 打印预览的东西,看看它,看看它是如何完成的。

  • Windows 控件具有滚动和缩放所需的所有功能。它们位于设备上下文中:SetWindowExt()、SetViewportExt()、SetViewportOrg() 等。在 MSDN 的“CDC Members”页面的“Coordinate Functions”下查看。话虽如此,我曾经通过跟踪滚动条的位置、控件的缩放命令等方式实现了“手动”缩放和滚动。回首往事,我应该使用 Windows 设施。不过,它们也不容易使用,这就是为什么我认为我自己一开始可以做得更好——结果证明我错了:)

  • 最后,虽然我不能从你的问题中确定你是否真的在那条船上,但不要考虑物理距离(毫米等)。您想要做的第一件事是在屏幕上绘制形状,元素之间的比例正确。然后你想放大/缩小。最后,只有当您到达打印部分时,物理测量才会发挥作用。您唯一需要弄清楚的(这里稍微简化一下)是“获得所需输出所需的正确缩放比是多少”。这有点棘手,但与问题的第一部分(如何将组件绘制到屏幕上)几乎没有关系。

如果您遇到问题,请不要犹豫,发布更具体的问题。我在这里有打印预览和打印代码作为打印过程的“通用”部分的示例,尽管每个应用程序的细节明显不同。

于 2009-04-23T11:49:57.897 回答