c++ - 使用两个纹理 SDL2 显示视频
问题描述
我需要构建一个界面,屏幕左侧显示一个流视频的一部分,右侧显示另一部分。像这样的https://www.youtube.com/watch?v=fSPXpdVzamo
视频流保存在正在加载到纹理上的内存缓冲区中。我的问题是如何只渲染纹理的一半,我一直在尝试使用 SDL_Rect 但没有任何反应。
这是我的代码的相关部分:
SDL_UpdateTexture(texture, NULL, buffer_start, fmt.fmt.pix.width * 2);
SDL_RenderClear(renderer);
SDL_RenderCopy(renderer, texture, NULL, NULL);
SDL_RenderPresent(renderer);
如果我尝试这样的事情,它不起作用:
SDL_UpdateTexture(texture, NULL, buffer_start, fmt.fmt.pix.width * 2);
SDL_Rect someRect;
someRect.x = 0;
someRect.y = 0;
someRect.w = 1500;
someRect.h = 3000;
SDL_RenderClear(renderer);
SDL_RenderCopy(renderer, texture, NULL, &someRect);
SDL_RenderPresent(renderer);
任何建议都会很棒!
解决方案
如果没有您发布 MCVE,很难知道您哪里出错了。我的猜测是你的 x 位置是错误的。这是一个示例,我展示了如何以视频的方式绘制 2 张图像。
绿色图片:https ://i.imgur.com/yaOG8Ng.png
红色图片: https ://i.imgur.com/faKKShU.png
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
#include <iostream>
#define HEIGHT 600
#define WIDTH 800
using namespace std;
int main() {
SDL_Init(SDL_INIT_VIDEO);
SDL_Window *window = SDL_CreateWindow("Red Green", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, WIDTH, HEIGHT, SDL_WINDOW_SHOWN);
SDL_Renderer *renderer = SDL_CreateRenderer(window, 0, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
bool quit = false;
SDL_Event event;
SDL_Texture *green_part = IMG_LoadTexture(renderer, "Green400x600.png");
SDL_Texture *red_part = IMG_LoadTexture(renderer, "Red400x600.png");
while (!quit) {
while (SDL_PollEvent(&event)) {
if (event.type == SDL_QUIT) {
quit = true;
}
}
SDL_RenderClear(renderer);
SDL_Rect copy_rect{0, 0, 400, 600};
SDL_RenderCopy(renderer, green_part, nullptr, ©_rect);
// We now draw from half the screen onward x position = WIDTH / 2.
copy_rect.x = 400;
SDL_RenderCopy(renderer, red_part, nullptr, ©_rect);
SDL_RenderPresent(renderer);
}
SDL_DestroyWindow(window);
SDL_DestroyRenderer(renderer);
SDL_Quit();
return 0;
}
推荐阅读
- c++ - 带有 [] 的嵌套映射内部值
- python - 如何在for循环中编写以下while llop?
- c++ - 使用while循环读取字符数据文件
- c++ - 在 Android Studio 中使用 NDK 交叉编译时 value_from_output_section 中的内部错误错误
- javascript - 正则表达式,通过空格或非字母数字将字符串拆分为单词,不包括主题标签
- vue.js - 当主题更改 vuetify 时,使用“辅助”的组件颜色不会改变
- html - Bootstrap:导航栏品牌右侧的空格?
- c++ - 操作从 FuncA 到 FuncB 的局部变量并返回的问题不是预期的
- node.js - 如何使用 Node postgres 将数组绑定到 IN 条件
- wordpress - 如何将现有网站从 Cake PHP 迁移到 Word press