SFML 2.0 中的图像大小调整

6

这可能是一个简单的问题,但我很难找到一个直接的答案:在SFML 2.0中有没有一种方法可以调整加载的纹理的大小?例如,如果我有一个3264x2448的png文件,并且我想将其缩小以适应900x1200的渲染窗口而不剪裁它,该怎么做?


除非您需要纹理可缩放,而不仅仅是缩小它,否则我建议您调整实际图像的大小。这将占用更少的硬盘空间和内存。如果您不断调整巨大的图像,则您的应用程序可能会受到性能影响。 - user1508519
有没有一种方法可以将所有渲染窗口缩放到适应应用程序运行的任何系统的任何监视器? - user3113547
2个回答

8
有没有一种方法可以缩放所有渲染窗口,以适应应用程序在任何系统上运行的任何监视器?
首先,这是一种将图像缩放到当前RenderWindow大小的方法。
// assuming the given dimension
// change this dynamically with the myRenderWindow->getView().getSize()
sf::Vector2f targetSize(900.0f, 1200.0f); 

yourSprite.setScale(
    targetSize.x / yourSprite.getLocalBounds().width, 
    targetSize.y / yourSprite.getLocalBounds().height);

请注意,如果不保持宽高比,这可能会拉伸您的图像。您可能需要添加代码来调整决策以适应您的情况。

如果您想要将RenderWindow拉伸以填充整个屏幕,我建议您使用全屏模式。

以下是如何执行此操作的代码片段:

// add the flag to the other ones
mStyleFlag = sf::Style::Default | sf::Style::Fullscreen;

// get the video mode (which tells you the size and BPP information of the current display
std::vector<sf::VideoMode> VModes = sf::VideoMode::getFullscreenModes();

// then create (or automatically recreate) the RenderWindow
mMainWindow.create(VModes.at(0), "My window title", mStyleFlag);

这里是对sf::VideoMode类的引用。 - Emile Bergeron

4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接