C#学习教程:如何使用GTKSharp打印图像一些应用程序涉及打印图像。在.NET中相当简单,基本上归结为e.Graphics.DrawImage(img,newRectangle(x,y,printSize.Width,printSize.Height));在PrintDocument的PrintPage事件中。Mono没有System.Drawing.Printing的完整实现,因此最好的方法似乎是使用GtkSharp。我在网上找到了一些关于如何使用Gtk.PrintOperation打印文本的示例。PrintOperation有一个事件DrawPage应该类似于PrintPage,但我只能找到如何使用PangoSharp在这个事件中打印文本。足以解释我所知道的,我认为这个问题相当简单。我希望有人能提供帮助,因为GtkSharp的打印没有很好的记录。如果有更好的方法在GtkSharp之外执行此操作,我会洗耳恭听。太感谢了。编辑所以我设法打印了一些东西,但是,它始终是空白页。这是代码:varprint=newPrintOperation();print.BeginPrint+=(obj,args)=>{print.NPages=1;};print.DrawPage+=(obj,args)=>{PrintContextcontext=args.Context;Cairo.Contextcr=context.CairoContext;varimageSurface=newCairo.ImageSurface(printImage.FileName);cr.MaskSurface(imageSurface,0,0);};print.EndPrint+=(obj,args)=>{};print.Run(PrintOperationAction.Print,null);几天来我一直在为Gtk.PrintOperation苦苦挣扎,但是有了你的帖子,它终于走到了一起。以下对您的代码示例的更改对我有用:varprint=newPrintOperation();print.BeginPrint+=(obj,args)=>{print.NPages=1;};print.DrawPage+=(obj,args)=>{PrintContext上下文=args.Context;Cairo.Contextcr=context.CairoContext;varimageSurface=newCairo.ImageSurface(printImage.FileName);intw=imageSurface.Width;inth=imageSurface.Height;cr.Scale(256.0/w,256.0/h);cr.SetSourceSurface(imageSurface,0,0);cr.Paint();};print.EndPrint+=(obj,args)=>{};print.Run(PrintOperationAction.Print,null);此外,它似乎只适用于PNG类型的图像。通过对DaveBlack的回答进行一些修改,我找到了一种打印任何图像类型的方法。也就是说,您应该能够将任何图像类型加载到Pixbuf中,并使用GdkCairoHelper在CairoContext上的Pixbuf上绘制。当类型不是PNG时,我从文件加载到Pixbuf时遇到问题,所以我首先使用System.Drawing.Image将它加载到字节数组中。此外,确保这发生在应用程序的主线程上。如果您的代码发生在其他线程上,请在主线程上调用Gtk.Application.Invoke(delegate{。以上就是C#学习教程:如何使用GTKSharp打印图片分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注——varimageBit=default(byte[]);varimage=System.Drawing.Image.FromFile(文件名);使用(varmemoryStream=newMemoryStream()){image.Save(memoryStream,ImageFormat.Png);imageBit=memoryStream.ToArray();}varprint=newPrintOperation();print.BeginPrint+=(obj,a)=>{print.NPages=1;};print.DrawPage+=(obj,a)=>{使用(PrintContextcontext=a.Context){使用(varpixBuf=newGdk.Pixbuf(imageBit,image.Width,image.Height)){Cairo.Contextcr=context.CairoContext;cr.MoveTo(0,0);Gdk.CairoHelper.SetSourcePixbuf(cr,pixBuf,image.Width,image.Height);cr.Paint();((IDisposable)cr).Dispose();}}};print.EndPrint+=(obj,a)=>{};print.Run(PrintOperationAction.Print,null);本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
