如何使用.NET快速生成图像

时间:2011-04-28 20:57:42

标签: c# .net gdi+ gdi

我已经熟悉System.Drawing命名空间,了解如何生成图像,绘制图像,在其上写文本等基本步骤。但是,对于任何接近打印的内容来说,它都是如此慢-质量。我已经看到一些建议使用COM与本机Windows GDI交谈以更快地完成此操作,但我想知道是否有任何优化我可以进行高速,高质量的图像生成。我尝试过使用抗锯齿选项,并且可以立即使用图形,位图和图像对象,但是我可以采用其他任何技术来实现这种高速度吗?

写这篇文章我只是考虑使用.Net 4中的任务库做更多工作,即使每一代任务都不会更快。

无论如何,思想和评论都很受欢迎。

谢谢!

3 个答案:

答案 0 :(得分:5)

答案 1 :(得分:2)

我有一些想法:

  1. 查看Paint.net中的代码。它是一个用C#编写的开源绘图程序。它可以给你一些好主意。你当然可以结合创意2和3来做到这一点。

  2. 如果需要以“立即”方式完成作业,则可以使用异步方式创建图像。根据整个应用程序的范围,您甚至可以使用类似NServiceBus的方法将图像处理组件与任务一起排队。任务完成后,发送组件将通过订阅完成时发布的消息接收通知。

  3. 基于任务的解决方案适用于延迟处理。您可以批量创建图像,并使用Task方法或Quartz.net(http://quartznet.sourceforge.net)。它是一个开源的作业调度程序,我用于所有基于时间的工作。

答案 2 :(得分:1)

您可以创建一个新的位图图像并执行LockBits(...),指定所需的像素格式。获得这些位后,如果要使用非托管代码绘制它,请引入库,将数据固定在内存中,并使用该库对其进行处理。我认为你可以使用GDI +来对抗原始像素数据,但我的印象是System.Drawing已经是GDI +之上的一个薄层。无论如何,无论我是否错,使用LockBits,您都可以直接访问像素数据,这可能与编程时一样快或慢。

完成绘图后,您可以使用UnlockBits和中提琴获得新图像。