【问题标题】:Handling multiple images in SDL2在 SDL2 中处理多个图像
【发布时间】:2020-12-29 06:29:12
【问题描述】:

我想知道如何使用 IMG_Load(); 处理多个图像我是否总是必须为每个图像创建一个表面?或者我必须创建一些循环,只使用这个表面来创建纹理?

SDL_Surface* surface = IMG_Load("resources/hello.png");
SDL_Texture* tex = SDL_CreateTextureFromSurface(rend, surface);

代码如下:

#include <stdio.h>
#include <SDL.h>
#include <SDL_timer.h>
#include <SDL_image.h>

int main(void)
{
    if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_TIMER) != 0)
    {
        printf("error initializing SDL: %s\n", SDL_GetError());
        return 1;
    }

    SDL_Window* win = SDL_CreateWindow("Hello, SDL2!",
                                       SDL_WINDOWPOS_CENTERED,
                                       SDL_WINDOWPOS_CENTERED,
                                       640, 480, 0);
    if (!win)
    {
        printf("error creating window: %s\n", SDL_GetError());
        SDL_Quit();
        return 1;
    }

    Uint32 render_flags = SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC;
    SDL_Renderer* rend = SDL_CreateRenderer(win, -1, render_flags);
    if (!rend)
    {
      printf("error creating renderer: %s\n", SDL_GetError());
      SDL_DestroyWindow(win);
      SDL_Quit();
      return 1;
    }

    SDL_Surface* surface = IMG_Load("resources/hello.png");
    if (!surface)
    {
        printf("error creating surface\n");
        SDL_DestroyRenderer(rend);
        SDL_DestroyWindow(win);
        SDL_Quit();
        return 1;
    }
    SDL_Texture* tex = SDL_CreateTextureFromSurface(rend, surface);
    SDL_FreeSurface(surface);
    if (!tex)
    {
        printf("error creating texture: %s\n", SDL_GetError());
        SDL_DestroyRenderer(rend);
        SDL_DestroyWindow(win);
        SDL_Quit();
        return 1;
    }

    SDL_RenderClear(rend);

    SDL_RenderCopy(rend, tex, NULL, NULL);
    SDL_RenderPresent(rend);

    SDL_Delay(5000);
    
    SDL_DestroyTexture(tex);
    SDL_DestroyRenderer(rend);
    SDL_DestroyWindow(win);
    SDL_Quit();
    return 0;
}

【问题讨论】:

  • 很明显,IMG_Load 每次调用它都会创建一个新表面,不是吗?
  • @user253751 是的,我现在可以看到了。因此,如果我想加载 10 张图像,我总是必须创建一个表面并将图像加载到其中并从表面创建纹理 10 次?
  • 这不是给你 10 个纹理都具有相同的图像吗?
  • @user253751 我的意思是 10 张不同的图片。
  • 很明显,如果您加载图像(创建表面)并从该表面创建 10 个不同的纹理,您将在 10 个不同的纹理中拥有相同的图像。如果要加载 10 个不同的图像,则必须加载 10 个不同的图像,这意味着调用 IMG_Load 10 次

标签: c sdl-2 image-rendering


【解决方案1】:

当我要加载大量图像时,我通常会创建一个 SDL_Texture* 类型的 vectorarray,它是一个类的成员,并使用 for 循环对其进行设置,在图像并附加它们

【讨论】:

  • 我也在想同样的事情(遍历数组),谢谢!我将不得不在没有类的情况下这样做,我使用 C。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
  • 2017-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多