c++ - 如何从多个纹理(C++、SDL 2)的一部分创建一个位图?

标签 c++ bitmap sdl pixel sdl-2

我有 *.png 文件,我想从纹理中获取不同的 8x8 像素部分并将它们放置在位图上(我猜是 SDL_Surface,但也许不是),像这样:

Image.

现在我在没有位图的情况下渲染它,即我调用每个纹理并在每一帧直接在屏幕上绘制部分,而且它太慢了。我想我需要加载每个 *.png 来分离位图并使用它们传递视频内存,然后只调用一个大位图,但也许我错了。我需要最快的方法,我需要这个代码(SDL 2,而不是 SDL 1.3)。 另外,也许我需要在这里使用清晰的 OpenGL?

更新:
或者我可能需要以某种方式将 *.png 加载到 int 数组并像通常的数字一样使用它们并将它们放入一个大的 int 数组,然后将其转换为 SDL_Surface/SDL_Texture?看起来这是最好的方法,但是怎么写呢?

更新 2:
每个 block 中的像素颜色与图片中呈现的颜色不同,并且它们可以是透明的。图片只是一个例子。

最佳答案

假设您已经将位图加载为 SDL_Texture(s),将它们组合成不同的纹理是通过 SDL_SetRenderTarget 完成的.

SDL_SetRenderTarget(renderer, target_texture);
SDL_RenderCopy(renderer, texture1, ...);
SDL_RenderCopy(renderer, texture2, ...);
...
SDL_SetRenderTarget(renderer, NULL);

您在设置渲染目标和重置渲染目标(通过使用 NULL 纹理参数调用 SDL_SetRenderTarget)之间执行的每个渲染操作都将渲染到指定的纹理。然后您可以像使用任何其他纹理一样使用此纹理。

关于c++ - 如何从多个纹理(C++、SDL 2)的一部分创建一个位图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19815669/

相关文章:

c++ - 数组中相邻元素的最大差和

c++ - 指针和字符串有什么区别?

c++ - 清除内存块(或 SDL 表面)的最快方法是什么?

c++ - Qt Creator下如何链接SDL2库

c++ - 在 Windows XP 中从数据包中检索 header 目标地址的函数

c++ 全屏 windows 7

android - 在 RemoteView 上调用 setImageViewBitmap 会导致令人难以置信的延迟

android - 在将过滤器应用于图像时避免内存不足异常 (Android)

c - 在 C 中的位图图像中查找水平线

c++ - 使SDL或SDL2与Dev-C++一起正常工作