用开罗的较大图像填充矩形

本文关键字:图像 填充矩形 | 更新日期: 2023-09-27 18:20:14

我正在用GTk在C#中开发一个应用程序。在这个应用程序中,我必须显示方框。一些填充了颜色,另一些填充了图像。这些盒子可以调整大小和移动。方框显示在绘图区域中。

当我用Cairo上下文绘制图像时,如果图像大于框,则图像不会完全填充框。我尝试过一些解决方案,比如每次调整方框大小时都在Pixbuf上使用ScaleSimple方法,但当方框很大时,应用程序就会变慢。每次创建一个新的Pixbuf实例不是一个好方法,因为性能对我的应用程序很重要。

我在文件和互联网上搜索了是否有参数可以告诉Cairo用图像填充矩形,但我一无所获。

这是我绘制图像的代码:

context.Translate(Bounds.X, Bounds.Y);
CairoHelper.SetSourcePixbuf(context, _source.Buffer, 0.0d, 0.0d);
context.Rectangle(0.0d, 0.0d, Bounds.Width, Bounds.Height);
context.Fill();

Bounds是一个Gdk.矩形,_source.Buffer是一个Pixbuf实例。

谢谢你的帮助。

用开罗的较大图像填充矩形

终于找到了解决方案。

在绘制图像之前只需要缩放即可。像这样,图像将始终与定义的矩形大小相同。

float xScale = (float)rectangle.Width / (float)buffer.Width;
float yScale = (float)rectangle.Height / (float)buffer.Height;
context.Translate(rectangle.X, rectangle.Y);
context.Scale(xScale, yScale);
CairoHelper.SetSourcePixbuf(context, buffer, 0.0d, 0.0d);
context.Paint();

名为buffer的变量是Pixbuf实例。有了这个解决方案,就不需要使用ScaleSimple重新创建Pixbuf,而且应用程序也不会减慢速度。