【发布时间】:2020-07-29 07:44:14
【问题描述】:
作为一名 Delphi 程序员,我有点像 hack - 在此过程中学习点点滴滴,主要是自学。
我正在开发一个有趣的程序,它是一个绝版纸牌游戏的数据库。包含卡片信息和卡片图片 JPG 的链接。
正在与某人谈论它,他们说“如果您可以在 2.5 x 3.5 英寸的页面上渲染多个卡片图像并打印它们,那不是很酷”。
除了法律问题(未经前出版商明确许可,我不会分发此内容),我想看看是否可以将其作为练习来教我如何使用 TCanvas。不幸的是,我真的不知道该怎么做。
我正在处理一个 8.5 x 11 英寸的页面,所以我想要一个 2.3 x 3.5 的卡片图像,它可以让我玩大约一英寸,而不是被卡片图像占用,所以就像 0.25 英寸的页边距一样每个图像之间大约 0.25 英寸。这将在页面上放置 9 张卡片。
对于我目前在程序中编写的内容,我可以将 TImage 拖放到表单上,然后从磁盘读取任何给定卡的关联 jpg 文件并将其显示在表单上。
假设我已经用这些卡片构建了一副卡片,并且想要打印我的“卡片”的图像。然后我如何为每张卡片获取关联的图像,调整它的大小以使其适合画布上的 2.5 x 3.5 空间,然后继续加载图像,直到页面上有 9 个。然后我想移动到一个新的页面,然后再做一次,直到我把卡片打印在我的牌组中(通常大约 50 张 - 所以大约 6 页)。
我一直在做一些搜索,但我不确定如何处理这些方面
- 读取后调整 JPG 大小
- 将其放置在画布上 - 总共可以获得 9 张图片
当前图像(大部分)为 390 x 546 像素。 (这是 2.5 x 3.5 英寸的正确比例)。
另外,为了尽量节省墨水和纸张,有没有办法在将画布发送到打印机之前“预览”画布(如果您愿意,可以进行打印预览),还是只是一个巨大的试验和错误直到你做对为止。
虽然首选特定代码示例,但如果我什至可以获得指向显示如何使用这些对象的网站的指针,我愿意做一些跑腿工作。
大约 15 年前,我把 Text 放到 TCanvas 上并打印它,但我不确定如何在从磁盘读取然后将其调整大小以打印到我想要的比例后使用 JPG 进行打印.
谁能在这里为我提供一些指点?
哦,如果重要的话,我正在使用 Delphi XE3 Enterprise / Windows 10。
谢谢。
【问题讨论】:
-
研究
StretchBltWinAPI 调用以将一个 DC (canvas.handle) 上的内容绘制到另一个 DC 到确定的位置和大小。 -
你可能会在这里找到一些灵感:stackoverflow.com/a/60366803/282848
-
只需在画布上绘制 TPicture,使用适当的位置和缩放比例,使用常规的 VCL 命令。并不比在画布上写文字更难。请至少显示您尝试的一些代码。比将您的问题分为两个:一个关于打印 Jpeg,另一个关于预览。预览很简单:只需在 TPaintBox 画布上绘制即可。请注意,两者都已经在 SO 或网络上得到了回答,当然。你至少谷歌了吗?
-
虽然可以在打印机画布上渲染多个图像,但我认为对于您需要的内容,仅使用 Delphi 附带的报告组件之一(如 Fast Report)可能会更容易例如创建所需的打印报告。这种方法的主要优点是几乎所有报表组件都支持生成打印预览,无需额外代码,更不用说某些报表组件允许您以与设计表单类似的方式直观地设计打印报表。
-
“为了尽量节省墨水和纸张”。当我想在不支持打印预览的应用程序中预览文档时,我总是打印到 PDF 或 XPS 打印机。主要是我用它来尝试我自己的打印程序。大多数现代 Windows PC 都有这样的虚拟打印机驱动程序。
标签: delphi delphi-xe3