【发布时间】:2011-01-11 12:07:34
【问题描述】:
我正在编写一个新的 WPF 应用程序,它会创建一些视觉元素,然后尝试在 Poloroid 打印机上打印它们。我使用 WPF 中的 System.Printing 类成功打印如下:
Dim Pd As PrintDialog = New PrintDialog()
Dim Ps = New LocalPrintServer()
Dim PrintQueue = New PrintQueue(Ps, "Poloroid Printer")
Pd.PrintQueue = PrintQueue
Pd.PrintVisual(Me.Grid1, "Print Job 1") 'this prints out perfectly
问题在于 poloroid 打印机有一个 SDK,您可以使用它来写入卡背面的磁条。我有一个使用 System.Drawing.Printing 中的 PrintPageEventArgs 的工作示例,但我找不到任何与 WPF 世界相近的匹配项。这是代码:
Private Sub PrintPage(ByVal sender as Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
'...
' Obtain the device context for this printer
deviceContext = e.Graphics.GetHdc().ToInt32()
'... device context is used in SDK to write to magstrip
e.Graphics.ReleaseHdc(New IntPtr(deviceContext))
End Sub
所以,我的问题是:
如何使用 System.Drawing.Printing 打印我现有的标记 (XAML)
或
System.Printing 中是否有与 SDK 对话并获取 Int32 deviceContext 的事件?
我尝试通过RenderTargetBitmap 类将 WPF 中的视觉呈现为位图并将位图转换为 System.Drawing.Bitmap
RenderTargetBitmap bitmapSource;
...
bitmapSource.Render(visual);
...
using(MemoryStream outStream = new MemoryStream())
{
BitmapEncoder enc = new BmpBitmapEncoder();
enc.Frames.Add(BitmapFrame.Create(bitmapSource));
enc.Save(outStream);
System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(outStream);
...
}
但是印刷不够清晰和完美。
【问题讨论】:
标签: c# wpf printing image-processing