-3

我想做的事情看起来简单直接,我希望从 Microsoft Visual C++(非托管代码)将 PNG 文件打印到打印机。

4

1 回答 1

6

由于这个问题几乎没有研究工作,我将把它当作一个家庭作业问题,并提供正确方向的指针,而不是一个完整的解决方案……

如果您已经完全熟悉 Windows 编程*,那么您肯定知道所有图形操作都涉及到绘图或以其他方式操作设备上下文。这就是 Windows 如何抽象出不同类型/品牌的输出设备之间的无数差异,并允许程序员为所有这些设备编写相同的代码。屏幕(即监视器)有设备上下文,打印机也有设备上下文。如果您在屏幕上绘制了任何内容,那么您已经使用了屏幕设备上下文。打印机设备上下文的工作方式大致相同。

因此,您的首要任务是创建/获取打印机设备上下文。我之前链接到的文档应该可以帮助您入门,但如果您找不到它,您想要的链接就是这个

一旦你有了打印机设备上下文,你只需要在其中绘制任何你想要的东西。这可以是文本或图形 - 在您的情况下为 PNG 图像。由于 GDI 本身并不支持 PNG,因此使用 PNG 比使用位图 (BMP) 更加困难。这个问题以及网络上其他地方的许多其他问题都更详细地介绍了该主题。不过,为了节省大量阅读时间,简单的答案是您需要使用 GDI+ 而不是 GDI。文档从这里开始。它有一个很好的 C++ API,但它也可以从 C 中使用。它可以追溯到(至少)Windows 2000,尽管在那些旧版本上它确实需要一个可再分发的 DLL。

使用 GDI+,您将使用两个主要类:Graphics类(封装设备上下文)和Image类(表示图像,包括 PNG)。一旦您创建了一个表示您的设备上下文的 Graphics 对象,并从您的图像创建了一个 Image 对象,您将调用 Graphics 对象的DrawImage实例方法来进行实际的绘图。

我想您还会发现以下两篇指南文章很有用:

请记住,如果您在尝试编写代码时遇到任何特定问题,请提出一个新问题,详细解释您尝试过的内容(最好显示一些示例代码)。

*如果没有,你还有很多工作要做。我建议购买一本能够彻底解释它的书。通过阅读 Stack Overflow 的答案来学习 Windows 编程是相当困难的。

于 2013-05-24T09:40:10.440 回答