gpt4 book ai didi

c++ - 如何在 24 位 SDL_Surface 上设置像素的颜色?

转载 作者:行者123 更新时间:2023-11-28 01:27:40 25 4
gpt4 key购买 nike

我尝试使用此函数设置像素的颜色:

void set_pixel(SDL_Surface *surface, SDL_Color, int x, int y)
{
Uint32 pixel= SDL_MapRGB(surface->format, color.r, color.g, color.b);
Uint32 *target_pixel = (Uint8 *) surface->pixels + y * surface->pitch +
x * sizeof *target_pixel;
*target_pixel = pixel;
}

不幸的是,它不起作用,我猜这是因为我的 SDL_Surface 每个像素有 24 位,但 SDL_MapRGB 返回一个 Uint32。我应该将我的 SDL_Surface 转换为每像素 32 位,还是有办法将 Uint32 像素转换为 24 位?

最佳答案

您最终需要屏蔽 pixel 中的 3 个 Uint32 字节,同时保持 target_pixel 的第 4 个字节不变(保持字节序记住)。

像这样的东西应该很接近,但不考虑字节顺序:

//assumes pixel has 0x00 for unused byte and assumes LSB is the unused byte
*target_pixel = pixel | (*target_pixel & 0xff)

顺便说一下,您的 target_pixel 计算似乎有误。您应该乘以每像素字节数,而不是 sizeof(Uint32)

关于c++ - 如何在 24 位 SDL_Surface 上设置像素的颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53087390/

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