复制RenderTexture到图像

Copy RenderTexture to Image

本文关键字:图像 RenderTexture 复制      更新时间:2023-10-16

我试图复制sf::RenderTexture(与sf::Image &sf::Text对它),以Opencv垫对象。我们可以通过

sf::Image转换为cv::Mat (Opencv)
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。我想唯一的解决方法是按照以下顺序加载对象

科幻:形象——比;科幻:纹理——比;科幻:精灵——在科幻小说:RenderTexture

科幻:文本——比;科幻:RenderTexture

最后将RenderTexture复制到sf::Image,然后转换为cv::Mat
我想这将需要很长时间复制sf::RenderTexture回到sf::Image.

还有其他解决方法吗?就像使用sf::Image::loadFromMemory();

p。S:这里有一些参考资料。

不,当涉及到SFML时,确实没有其他选择。从VRAM复制到RAM不是很快,但应该仍然能够以一个不错的帧率执行。也许你应该试一试,看看性能是否真的影响你的场景。

这里的问题是SFML在GPU空间中操作,所以文本渲染是为渲染你的GPU与精灵类似的事情,但你实际上似乎想要的是CPU渲染文本和精灵。

如果你只翻译精灵(没有缩放/旋转),那么在sf::Image之上构建这样的功能应该相对容易。

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