无法读取(和比较)SDL2中的像素

无法读取(和比较)SDL2中的像素,sdl,pixels,Sdl,Pixels,我正在SDL2中加载一个PNG文件,并试图在spritesheet动画中找到要跟踪的“特殊”像素颜色。我已将这些像素放入图像中,但我的代码找不到它们 我正在使用此代码读取像素(取自互联网,包装到我自己的纹理类中): …并且,当循环遍历每个精灵帧中的所有像素时 // get pixel at (x, y) Uint32 pix = _texture->GetPixel(x, y);

我正在SDL2中加载一个PNG文件,并试图在spritesheet动画中找到要跟踪的“特殊”像素颜色。我已将这些像素放入图像中,但我的代码找不到它们

我正在使用此代码读取像素(取自互联网,包装到我自己的纹理类中):

…并且,当循环遍历每个精灵帧中的所有像素时

                    // get pixel at (x, y)
                    Uint32 pix = _texture->GetPixel(x, y);

                    // if pixel is a special value, store it in animation
                    if (pix == spec1)
                    {
                        SDL_Point pt = {x, y};
                        anim->Special1.push_back(pt);
                        found1 = true;
                    }
                    else if (pix == spec2)
                    {
                        SDL_Point pt = {x, y};
                        anim->Special2.push_back(pt);
                        found2 = true;
                    }
现在,我在这些if语句中设置了一个断点,以检查是否找到了颜色,但从未到达断点。有人知道问题出在哪里吗

另外,我也尝试过使用SDL_MapRGB(),但这也不起作用

[编辑]


好的,我试着在整个图像的0,0处放置一个像素,RGB值为66、77和88。它把它们读入了as 84、96和107,因此很明显,颜色要么被改变,要么没有正确读入。但是,当我尝试使用特定的alpha值时,它可以完美地读取它。我会将我的系统更改为仅使用alpha值,但我正在使用的像素编辑器似乎会在您放入像素并将其与图像的其余部分混合后删除alpha值。

您的偏移公式不正确,应该是:

Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x
x
不需要乘以
bpp

投球 表面扫描线的长度(以字节为单位)

俯仰(也称为步幅)的计算如下:

pitch = width * bytes per pixel

bytes per pixel = (bits per pixel + 7) / 8
当您处于正确的字节偏移量时,从中获取一个
Uint32
(对于32bpp图像),并进行比较

Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x
pitch = width * bytes per pixel

bytes per pixel = (bits per pixel + 7) / 8