我需要将我的 DrawingArea 对象的图像保存到位图,但我找不到如何做到这一点。谁能告诉,如何将 DrawingArea 图像保存到位图?
1 回答
有几种方法可以做到这一点,这完全取决于您想要做什么以及您是否/为什么真的需要System.Drawing.Bitmap
.
复制小部件
您可以 P/Invoke gtk_widget_get_snapshot以获取Gdk.Pixbuf
.
Pixbuf 可以保存到一个文件中,或者复制到一个System.Drawing.Bitmap
.
使用 System.Drawing
您可以将绘图代码移植到 System.Drawing API。
在您的 DrawingAreaExpose
方法中,使用Gtk.DotNet.Graphics.FromDrawable为您的小部件获取一个System.Drawing.Graphics
,并使用您移植的绘图代码在其上绘制。
然后,您可以创建一个System.Drawing.Bitmap
并使用相同的绘图代码对其进行绘图。
使用开罗
您可以将绘图代码移植到Mono.Cairo
(新的 GTK# 绘图 API,它比 System.Drawing 更强大)。
在您的 DrawingAreaExpose
方法中,使用Gdk.CairoHelper.Create
为您的小部件获取 Cairo 上下文,并使用您移植的绘图代码在该上下文上绘制。
然后,您可以使用 Cairo 绘图逻辑写入 Cairo ImageSurface
,可以将其保存到一个文件中,或者复制到一个System.Drawing.Bitmap
.