gpt4 book ai didi

c++ - SDL2修改像素

转载 作者:行者123 更新时间:2023-11-28 07:09:39 25 4
gpt4 key购买 nike

我想用 SDL2 修改单个像素,但我不想用表面来做。

这是我的代码的相关部分:

// Create a texture for drawing
SDL_Texture *m_pDrawing = SDL_CreateTexture(m_pRenderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_STREAMING, 1024, 768);

// Create a pixelbuffer
Uint32 *m_pPixels = (Uint32 *) malloc(1024*768*sizeof(Uint32));

// Set a single pixel to red
m_pPixels[1600] = 0xFF0000FF;

// Update the texture with created pixelbuffer
SDL_UpdateTexture(m_pDrawing, NULL, m_pPixels, 1024*sizeof(Uint32));

// Copy texture to render target
SDL_RenderCopy(m_pRenderer, m_pDrawing, NULL, NULL);

如果使用 SDL_RenderPresent(m_pRenderer) 进行渲染,则屏幕上不会出现任何内容。 Here他们解释说您可以使用“surface->pixels,或 malloc()'d buffer”。那么,怎么了?

编辑:最后,它只是我的 m_pRenderer,它是在 SDL_CreateTexture 调用之后定义的。现在一切正常,我修复了缓冲区分配中的小错误,所以这段代码应该可以正常工作。

最佳答案

我不确定这是否是您的问题,但这是一个错误:

Uint32 *m_pPixels = (Uint32 *) malloc(1024*768);

如果你想分配足够的数据来表示你表面的像素,你需要一个 * sizeof(Uint32):

Uint32 *m_pPixels = (Uint32 *) malloc(1024*768*sizeof(Uint32));

(如果这是 C,则不需要强制转换。)

关于c++ - SDL2修改像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21212307/

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