gpt4 book ai didi

c# - 如何使用 Cairo-Sharp 将 Pixbuf 绘制到表面上?

转载 作者:太空宇宙 更新时间:2023-11-03 10:41:41 24 4
gpt4 key购买 nike

我正在将我现有的一个项目移植到 GTK3+(GTK-Sharp3 等,因为它是一个 C# 项目)。对于其中的绝大多数,这是一个简单的过渡,不需要太多改变,但我正在做“区域屏幕截图”类型系统的方式(其中用户确定他们希望保存为的全屏图像区域)裁剪后的版本)似乎已被新库弃用(或者至少我看起来不够努力)。

有问题的代码是“[Pixmap].DrawPixBuf”方法,其中您可以将 pixbuf 绘制到 Pixmap 中,其中包含一些参数,这些参数描述了要从中获取的源“矩形”和“目标”矩形将源矩形的内容放入其中。

我原来使用的代码如下:

pmBackBuffer.DrawPixbuf(drawingAreaRegion.Style.BaseGC(StateType.Normal),
pbHazy, 0, 0, 0, 0, platformSpecific.getScreenWidth(), platformSpecific.getScreenHeight(), RgbDither.Normal, 0, 0);

它采用像素图“pmBackBuffer”,使用 BaseGC(这个概念现在似乎也已弃用)在其上绘制,从源上的坐标 0、0 开始,并将它们放置在当前屏幕的大小上目的地。

我了解到 Cairo 可能是此类系统的替代品,一些在线文档建议 Pixmap 对象已被 Cairo 表面替代,但我不知道如何获得类似的行为,我可以在其中绘制具有这些参数的 Pixbuf 到表面上。

我也找不到任何人询问如何将 Pixmap 转换为 Surface。我找到了相反的方式,但不是我要找的方式。

那么问题来了,有没有一种方法可以与我上面的新 Cairo 表面的方法类似?

非常感谢任何帮助。

最佳答案

原来这样做的方法是先创建一个上下文,然后使用

Gdk.CairoHelper

方法

Gdk.CairoHelper.SetSourcePixbuf(Context, Pixbuf, 0, 0)

将 Pixbuf 传输到现有的 ImageSurface。一个更详细的例子如下:

private void Example(Pixbuf pb)
{
ImageSurface imgSurface = new ImageSurface(Format.RGB24, pb.Width, pb.Height);

using (Cairo.Context cr = new Cairo.Context(imgSurface)) {
Gdk.CairoHelper.SetSourcePixbuf (cr, pb, 0, 0);
cr.Paint ();
cr.Dispose ();
}
}

关于c# - 如何使用 Cairo-Sharp 将 Pixbuf 绘制到表面上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25106063/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com