Получение неправильных показаний с изображения

Я сделал изображение 3х3 со всеми квадратами черного цвета (0,0,0), если не углы …
Где у меня есть красный, зеленый, синий и белый пиксель, как показано ниже:

R, 0, G
0, 0, 0
B, 0, W

Который должен быть помещен как R, 0, G, 0, 0, 0, B, 0, W в массиве pixeldata, если я правильно понял.
У меня проблема в том, что распечатано:

[255, 0, 0] [0, 0, 0]   [0, 0, 0]
[0, 0, 0]   [0, 0, 0]   [0, 0, 0]
[0, 0, 255] [0, 0, 255] [255, 0, 0]

Вот мой код:

Uint32 GetPixel(SDL_Surface *img, int x, int y) {
//Convert the pixels to 32 bit
Uint32 *pixels = (Uint32*)img->pixels;

//Get the requested pixel
Uint32 offsetY = y * img->w;
Uint32 offsetPixel = offsetY + x;
Uint32 pixel = pixels[offsetPixel];

return pixel;
}int main(int argc, char *argv[]) {
printf("Hello world!\n");

SDL_Init(SDL_INIT_EVERYTHING);
SDL_Surface *img = IMG_Load("Images/Colors.png");
vector <Uint32> pixels;

SDL_LockSurface(img);

for (int y = 0; y < img->h; y++) {
Uint8 r, g, b;
Uint32 pixel;
for (int x = 0; x < img->w; x++) {
pixel = GetPixel(img, x, y);

SDL_GetRGB(pixel, img->format, &r, &g, &b);
printf("[%u, %u, %u]\t", r, g, b);
pixels.push_back(pixel);
}
printf("\n");
}

SDL_UnlockSurface(img);

system("pause");
return 0;
}

РЕДАКТИРОВАТЬ: Что я ожидал:

[255, 0, 0] [0, 0, 0]   [0, 255, 0]
[0, 0, 0]   [0, 0, 0]   [0, 0, 0]
[0, 0, 255] [0, 0, 0]   [255, 255, 255]

1

Решение

Проблема в вашем GetPixel функция. Попробуйте что-то вроде этого:

Uint32 GetPixel(SDL_Surface *surface, int x, int y)
{
int bpp = surface->format->BytesPerPixel;
Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * bpp;
return *(Uint32*)p;
}
1

Другие решения


По вопросам рекламы [email protected]