gpt4 book ai didi

c++ - 将 RenderTexture 复制到图像

转载 作者:太空宇宙 更新时间:2023-11-03 22:49:58 26 4
gpt4 key购买 nike

我正在尝试复制 sf::RenderTexture(上面有 sf::Imagesf::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。我想唯一的解决方法是按以下顺序加载对象

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

sf::Text --> sf::RenderTexture

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

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

P.S: 一些引用 here & here

最佳答案

不,就 SFML 而言,确实没有其他选择。从 VRAM 复制到 RAM 的速度不是很快,但应该仍然能够以不错的帧率执行。也许您应该尝试一下,看看性能是否真的会影响您的场景。

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

如果您只翻译 Sprite (没有缩放/旋转),那么在 sf::Image 之上构建此类功能应该相对容易。

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

关于c++ - 将 RenderTexture 复制到图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40232041/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com