Как предотвратить автоматическое масштабирование моего изображения, нарисованного внутри RenderWindow?
Я использую SFML.Net 2.4 с C#
У меня RenderWindow размером 1000x1000, вставленный в System.Windows.Forms.Form таким образом:
public class ViewForm : Form
{
SFML.Graphics.RenderWindow _renderWindow = null;
public ViewForm()
{
_renderWindow = new RenderWindow(this.Handle);
}
}
В моей функции рисования я просто рисую изображение, используя спрайт:
_renderWindow.DispatchEvents();
_renderWindow.Clear(Color.Black);
Image img = new Image(path);
Texture tex = new Texture(img);
Sprite sprite = new Sprite(tex);
_renderWindow.Draw(sprite);
_renderWindow.Display();
Моя проблема заключается в том, что при отображении этот спрайт принимает по умолчанию наибольшее измерение (то есть 1000 здесь), тогда как базовое изображение имеет высоту всего 100 пикселей (без растяжения, но, тем не менее, с автоматическим масштабированием).
Я не хочу, чтобы мне пришлось самостоятельно изменять масштабирование... как я могу сохранить исходные размеры моего изображения?
Я сделал тест: чтобы правильно отобразить спрайт в RenderWindow (работающий сам по себе, на этот раз не встроенный в winform), мне пришлось применить шкалу, следуя этому правилу:
sprite.Scale = new SFML.System.Vector2f(myScreenWidth / 1000f, myScreenHeight / 1000f);
У меня размер экрана 1920х1080, поэтому мне пришлось применить шкалу (1,92; 1,08) к спрайтам... WTF?
0 ответов
Проблема заключалась в том, что я менял размер своей ViewForm после передачи его дескриптора в SFML с помощью:
new RenderWindow(this.Handle);
Я тогда делал:
this.Width = (int)finalWidth;
this.Height = (int)finalHeight;
Теперь, когда моя форма меняет размер, я удаляю, а затем восстанавливаю RenderWindow SFML. И это работает.