在Microsoft Visual C ++(而不是托管代码)中如何将PNG打印到打印机?

时间:2013-05-24 08:17:43

标签: c++ printing

我想做的事情似乎简单明了,我希望从Microsoft Visual C ++(非托管代码)打印到打印机的PNG文件。

1 个答案:

答案 0 :(得分:6)

由于这个问题几乎没有研究成果,我将把它视为一个家庭作业问题并提供正确方向的指示,而不是一个完整的解决方案......

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

因此,您的第一项业务是创建/获取打印机设备上下文。我之前链接的文档可以帮助您入门,但是如果您找不到它,您想要的链接是this one

拥有打印机设备上下文后,您只需要在其中绘制任何内容即可。这可以是文本或图形 - 在您的情况下是PNG图像。由于GDI本身不支持PNG,因此使用PNG而不是比特图(BMP)会变得更加困难。 this question以及此处和网络上的其他许多人都详细介绍了该主题。但是,为了节省大量的阅读,简单的答案是你需要使用GDI +而不是GDI。该文档的开头是here。它有一个很好的C ++ API,但它也可以从C中使用。它可以作为(至少)Windows 2000工作,尽管在那些旧版本它确实需要一个可再发行的DLL。

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

我想你也会发现以下两篇有用的文章:

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

* 如果没有,你就会有很多工作要做。我建议购买a book来彻底解释它。从阅读Stack Overflow答案中学习Windows编程相当困难。