关于c ++:将RenderTexture复制到图像

Copy RenderTexture to Image

我正在尝试将sf::RenderTexture(带有sf::Imagesf::Text)复制到Opencv Mat对象。 我们可以通过以下方式将sf::Image转换为cv::Mat(Opencv)

1
2
3
4
sf::Image img;
cv::Size size(img.getSize().x, img.getSize().y);    
cv::Mat mat(size,CV_8UC4, (void*)img.getPixelsPtr(), cv::Mat::AUTO_STEP);
cv::cvtColor(mat, mat, cv::COLOR_RGBA2BGRA);

据我所知,在SFML中,我们无法将文本直接添加到sf::Image中,但是我们必须使用RenderWindow或RenderTexture。 我猜唯一的解决方法是按以下顺序加载对象

sf::Image --> sf::Texture --> sf::Sprite -->sf::RenderTexture

sf::Text --> sf::RenderTexture

最后将RenderTexture复制到sf :: Image,然后将其转换为cv :: Mat
我想将sf :: RenderTexture复制回sf :: Image将花费很长时间。
还有其他解决方法吗? 就像使用sf :: Image :: loadFromMemory();

附注:此处和此处的一些参考


不,关于SFML,实际上没有其他选择。 从VRAM复制到RAM的速度不是很快,但是仍然应该能够以令人满意的帧速率执行。 也许您应该尝试一下,看看性能是否确实会影响您的方案。

这里的问题是SFML在GPU空间中运行,因此文本渲染是为了用GPU渲染带有sprite的类似东西,但是您实际上想要的是CPU渲染文本和sprite。

如果仅翻译精灵(不缩放/旋转),则在sf::Image之上构建此类功能应该相对容易。

对于文本渲染,您可能需要直接使用freetype,而不要将字体数据移动到GPU。