Как предотвратить автоматическое масштабирование моего изображения, нарисованного внутри 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. И это работает.

Другие вопросы по тегам