C++ 如何在SDL上加载原始像素位图?

C++ 如何在SDL上加载原始像素位图?,c++,sdl,C++,Sdl,目前我在SDL应用程序中使用bmp文件,但我想隐藏它们以分发我的exe。我认为将它们作为原始字节移动到头文件中是一种好方法,因为BMP是非常简单的黑白模式 我不确定仅使用SDL是否可以实现这一点,但到目前为止,我无法加载一个简单的位模式 // data.h const unsigned char rawPixels[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,0xFF, 0xFF, 0xFF, 0xFF,0xFF, 0

目前我在SDL应用程序中使用bmp文件,但我想隐藏它们以分发我的exe。我认为将它们作为原始字节移动到头文件中是一种好方法,因为BMP是非常简单的黑白模式

我不确定仅使用SDL是否可以实现这一点,但到目前为止,我无法加载一个简单的位模式

// data.h    
const unsigned char rawPixels[] =
{
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,0xFF, 0xFF, 0xFF, 0xFF,0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,0xFF, 0xFF, 0xFF, 0xFF,0xFF, 0xFF, 0xFF, 0xFF,
};


// main.cpp
...
SDL_RWops *pixelsWop = SDL_RWFromConstMem((const unsigned char *)rawPixels, sizeof(rawPixels));
SDL_Surface *pixelsSurface = SDL_LoadBMP_RW(pixelsWop, 1);
SDL_BlitSurface(pixelsSurface, NULL, NULL, NULL);
...
我只从SDL_LoadBMP_RW调用中得到一个空的曲面,也许数组应该包含正确的BMP头,等等。有人能指出这是问题吗?
是否有其他加载方法?

此方法不起作用的原因是您的数据不代表位图,而是原始像素数据。如果您想查看原始位图的外观,只需在paint中创建一个并在十六进制编辑器中打开它,您将看到标题,然后是实际的像素数据

我建议您只需使用所需的尺寸创建一个
SDL_曲面
,然后修改中的像素访问方法以获取原始数据,或者为每个像素调用
putpixel
(如果这仅用于测试目的)

取决于几个因素,所有像素都不是内存中连续的值数组,您需要考虑
SDL_表面
pitch
bpp
(每个像素的字节数)。在你的例子中,我假设它是一个8位(1字节)的像素?在这种情况下,可以很容易地逐行填充
像素
数据,每次移动
基音
的行指针


你可能也会觉得有趣。

投球有什么意义?我的意思是,为什么音高与图像中的宽度不同?我知道使用SSE/AVX有助于使宽度为4或8的倍数,这样音高和宽度可以不同,但这是我所知道的唯一示例。我想知道是否还有更常见的例子?这篇文章有很多关于音高的解释:)谢谢!这正是我想要的讨论类型。