Во первых у тебя BitsPerPixel - константа, сравнение BitsPerPixel > 24 можно сделать один раз в самом начале. Во вторых если а) BitsPerPixel > 24 - true, и б) структура Pixel выглядит как struct Pixel { uint8_t B; uint8_t G; uint8_t R; uint8_t A; } ты можешь заменить весь for width на memcpy(&Pixels[(height - 1 - I) * width], BuffPos, 4 * width); BuffPos += 4 * width; В третьих я не очень понимаю зачем переворачивать весь огромный массив, если можно получать только тот пиксель, что тебе нужен(Pixel px = *(Pixel*)&BuffPos[(height - 1 - y) * width + x])