旋转纹理sfml并将输出保存到文件

时间:2016-02-13 22:30:03

标签: c++ opengl sfml

我想首先说我是一个完整的c ++新手。我不知道与之相关的任何词汇,所以如果这个问题很简单,我很抱歉,因为我现在没有正确的术语或短语来解决这个问题。

目前正在使用我在github上找到的代码来捕捉我的3ds中的游戏玩法。 https://github.com/Gotos/Cute3DSCapture/blob/master/main.cpp

我正在尝试添加旋转图像并将其保存到png文件的功能。

main.cpp左右第267行我试图添加以下功能。

sprite.setTexture(texture);
sprite.rotate(90);
texture = sprite.getTexture();
texture.copyToImage().saveToFile("Something/Place/img.png");

当前纹理和精灵定义如下。

sf::Texture texture;
sf::Sprite sprite;

当我尝试构建并运行时,我得到了以下

main.cpp:269:25: error: no viable overloaded '='
                texture = sprite.getTexture();
                ~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~
/usr/local/include/SFML/Graphics/Texture.hpp:421:14: note: candidate function
      not viable: no known conversion from 'const sf::Texture *' to
      'const sf::Texture' for 1st argument; dereference the argument with *
    Texture& operator =(const Texture& right);

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

sf::Sprite不是纹理操纵器,这意味着sf::Sprite::getTexture()返回的纹理不会被修改。这就是Sprite的ctor引用const纹理实例的原因。

如果您只对图像处理感兴趣,我建议您使用除SFML之外的其他内容,因为您可能会针对特定操作获得更好的功能/性能。可能像imagemagick。

使用SFML,你可以大致这样做:

  • 创建所需大小的RenderTexture - 将其视为一个虚拟窗口,可以在调用.display()时访问其纹理。
  • 使用初始纹理和一些操作(例如旋转)创建精灵 - 确保渲染纹理的大小正确设置为"显示"结果图像
  • 在渲染纹理上绘制精灵,并在其上调用display()
  • 然后,您可以拨打sf::RenderTexture::getTexture()并链接copyToImage()saveToFile()

查看sf::RenderTexture的详细说明以获取使用示例。