Я разрабатываю приложение в C# с GTk. В этом приложении я должен отображать поля. Некоторые из них заполнены цветом, а другие - с изображением. Эти коробки можно изменять и перемещать. Ящики отображаются в DrawingArea.Заполните прямоугольник большим изображением с помощью Cairo
Когда я рисую изображение в контексте Каира, изображение не заполняет поле полностью, если изображение больше, чем поле. Я пробовал некоторые решения, такие как использование метода ScaleSimple на Pixbuf каждый раз при изменении размера окна, но когда ящик большой, приложение становится медленным. И создать новый экземпляр Pixbuf каждый раз не является хорошим подходом, поскольку производительность важна для моего приложения.
Я искал в документации и в Интернете, если есть параметр, чтобы сообщить Каиру, чтобы заполнить прямоугольник изображением, но я ничего не нашел.
Вот мой код, чтобы сделать изображение:
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.Rectangle и _source.Buffer экземпляр Pixbuf.
Спасибо за помощь.
Что именно означает «заполнить прямоугольник» для вас? Вы хотите масштабировать изображение так, чтобы оно охватывало все пиксели вашего прямоугольника? Вы хотите повторить изображение несколько раз, чтобы все было нарисовано? –
Я хочу масштабировать изображение, чтобы заполнить все пиксели моего прямоугольника. В настоящее время, если у меня есть прямоугольник размером 100x100 и изображение 1024x1024, прямоугольник заполняется верхней левой частью изображения, соответствующей 100x100. Я попытался использовать метод ScaleSimple на своем Pixbuf, хорошо работаю, но это решение замедляет мое приложение, и кажется, что он воссоздает pixbuf. Поэтому я ищу более быстрое решение. –
Uhm, так что вы хотите кэшировать ваши масштабированные поверхности? Возможно, если у вас есть 1024x1024, вы можете кэшировать 512x512, 256x256 и т. Д. И использовать самый близкий? Возможно, также кешируйте тот, который соответствует текущему размеру прямоугольника. Масштабирование происходит медленно, этого не может быть сделано, поэтому его следует избегать –