【问题标题】:SDL2 pixel manipulationSDL2 像素操作
【发布时间】:2015-10-16 21:24:41
【问题描述】:

我需要创建一个窗口,并用颜色填充它的所有像素。这不应该太难,但一个小时左右后我仍然无法让它工作。这是我现在的代码:

#include <SDL2/SDL.h>

int main(int argc, char** argv)
{
    enum {
        WIDTH = 640,
        HEIGHT = 480
    };
    SDL_Window* window = SDL_CreateWindow(
        "SDL test",
        SDL_WINDOWPOS_CENTERED,
        SDL_WINDOWPOS_CENTERED,
        WIDTH,
        HEIGHT,
        SDL_WINDOW_SHOWN
    );
    SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);

    SDL_Texture* texture = SDL_CreateTexture(renderer,
        SDL_PIXELFORMAT_RGBA8888,
        SDL_TEXTUREACCESS_STREAMING,
        WIDTH,
        HEIGHT
    );
    SDL_Surface* surface = SDL_CreateRGBSurface(
        0,
        WIDTH,
        HEIGHT,
        32,
        0x00000000,
        0x00000000,
        0x00000000,
        0xff000000
    );
    Uint32 gray = SDL_MapRGBA(surface->format, 0x1E, 0x1E, 0x1E, 0xFF);
    Uint32 red = SDL_MapRGBA(surface->format, 0xFA, 0x32, 0x32, 0xFF);

    int i, j;
    Uint32* pixels32 = (Uint32*) surface->pixels;
    for (i = 0; i < HEIGHT; ++i)
    {
        for (j = 0; j < WIDTH; ++j)
        {
            pixels32[i * WIDTH + j] = j%10 ? gray : red;
        }
    }
    SDL_UpdateTexture(texture, NULL, surface->pixels, surface->pitch);

    SDL_RenderPresent(renderer);

    int quit = 0;
    SDL_Event event;
    while (!quit)
    {
        while (SDL_PollEvent(&event) != 0)
        {
            if (event.type == SDL_QUIT)
                quit = 1;
        }
    }
    SDL_FreeSurface(surface);
    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);
    SDL_Quit();

    return 0;
}

但它显示一个白色窗口。我做错了什么?

【问题讨论】:

  • 当您处于程序关闭阶段时,您为什么要SDL_RenderPresent
  • @Rhymoid 哦,错了,当我想移动 SDL_FreeSurface 函数时,我也移动了它。现在我看到一个黑色的窗口,太棒了。
  • 至少颜色不同。现在,您是否尝试过使用SDL_RenderCopy(或其-Ex 变体)将纹理实际blitting 到表面?
  • @Rhymoid 当我把它放在SDL_UpdateTextureSDL_RenderPresent 函数之间时它起作用了。谢谢!如果您将其发布为答案,我会接受。

标签: c sdl-2


【解决方案1】:

您创建了一个纹理,但尚未绘制它。为了在表面上绘制它,您仍然需要调用SDL_RenderCopy

【讨论】:

    猜你喜欢
    • 2016-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-30
    • 2015-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多