Как предотвратить автоматическое масштабирование моего изображения, нарисованного внутри RenderWindow? - PullRequest
0 голосов
/ 05 декабря 2018

Я использую 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);

Мой размер экрана 1920x1080, поэтому мне пришлось применить шкалу (1,92; 1,08) к спрайтам ... WTF?

1 Ответ

0 голосов
/ 02 июля 2019

Проблема заключалась в том, что я изменял размер моей ViewForm после того, как передал ее дескриптор в SFML с помощью:

new RenderWindow(this.Handle);

Я тогда делал:

this.Width = (int)finalWidth;
this.Height = (int)finalHeight;

Теперь, когдамоя форма изменяет размер, я располагаю, а затем заново создаю SFML RenderWindow.И это работает.

...