我一直在 Udemy 上关注 Cave of Planning 的 C++ for Complete Beginners,在第 67 课中,他介绍了位移位以在 SDL 窗口中输出某些颜色像素。在某个片段中,他对 Uint32 中的一系列 Uint8 进行了左移,最后在其末尾添加了 0xFF。我很难弄清楚为什么它在最后。
void Screen::setPixel(int x, int y, Uint8 red, Uint8 green, Uint8 blue) {
Uint32 color = 0;
color += red; // 00000080
color <<= 8; // 00008000
color += green; // 00008000
color <<= 8; // 00800000
color += blue; // 008000FF
color <<= 8; // 8000FF00
color += 0xFF; // 8000FF000xFF ???
m_buffer[(y * SCREEN_WIDTH) + x] = color; // y * screen_width gives 800, 1600 etc pixels; essentially allows row selection
}
这是我当前正在使用的功能,评论是我在教程中的思考过程。
在编程上,整数(128, 0, 255)用于(红,绿,蓝),对应于十六进制的(80,00,FF)
编译程序后,显示十六进制代码 0xFF8000FF 的颜色,我通过放置在线找到的相同颜色(https://convertingcolors.com/hex-color-8000FF.html)并并排检查来验证它-side 以确保它与我的 SDL 窗口中显示的匹配,但我不明白 0xFF 如何从 Uint32 的末尾“跳”到前面。
我很难在网上找到资源,因为我不完全确定如何简洁地表达我的问题。
编辑:使用 g++ 编译器
您在 SDL 应用程序中指定的是 RGBA 颜色模型
[ R | G | B | A ]
[ 80 | 00 | FF | FF]
你在网上看到的是RGB颜色模型,没有alpha通道
[ R | G | B ]
[ 80 | 00 | FF]
例如
[ R | G | B | A ]
[ 80 | 00 | FF | 80]
可能会在白色背景上给出(如果我没记错的话)
[ R | G | B ]
[ 40 | 00 | 80 ]