我正在为C#使用Cairo绑定,我希望能够裁剪ImageSurface并将其放入新的ImageSurface变量中,然后我将在单独的子例程中使用该变量。问题是我该如何正确地做到这一点。
这是我的代码:
ImageSurface OutputImage = new ImageSurface (Format.Rgb24, (int)RectangleToCropTo.Width, (int)RectangleToCropTo.Height);
using (Cairo.Context cr = new Cairo.Context(OutputImage)) {
cr.SetSource (originalImage);
cr.Rectangle (RectangleToCropTo);
cr.Clip ();
cr.Paint ();
}
目前,它确实向下裁剪了图像,并且看起来从正确的点开始-但OutputImage在x轴和y轴上的偏移量是从0到0的像素量,即选择的左上角。图像未填充的区域是透明的。
我还尝试了以下方法:
ImageSurface OutputImage = new ImageSurface (Format.Rgb24, (int)RectangleToCropTo.Width, (int)RectangleToCropTo.Height);
using (Cairo.Context cr = new Cairo.Context(OutputImage)) {
cr.SetSource (originalImage, RectangleToCropTo.X, RectangleToCropTo.Y);
cr.Rectangle (RectangleToCropTo);
cr.Clip ();
cr.Paint ();
}
这两个额外的参数可能会标记“源”应该从哪个点存储(根据我的理解,“40,40”意味着“绘制”图像将导致图像从40,40以及其右侧和下方的任何位置)。
然而,这既没有为我提供裁剪的图像,反而包含了麻烦的偏移,并从图像的左上角开始绘制。
我还认为这可能是解决方案:
ImageSurface OutputImage = new ImageSurface (Format.Rgb24, (int)RectangleToCropTo.Width, (int)RectangleToCropTo.Height);
using (Cairo.Context cr = new Cairo.Context(OutputImage)) {
cr.SetSource (originalImage, RectangleToCropTo.X, RectangleToCropTo.Y);
cr.Clip ();
cr.Paint ();
}
但毫无用处,这只会产生与前一代码块相同的结果。
如果你们中有人能告诉我我做错了什么(这可能是最愚蠢的错误),我会很感激的。
我用的是Gtk3附带的开罗夏普。
谢谢:)