Я написал следующую функцию для вращения массива пикселей без знака, который содержит изображение RGB на 90 градусов. Проблема, с которой я сталкиваюсь, состоит в том, что повернутый вывод полностью искажен.Поворот пиксельной матрицы на 90 градусов в C++
void rotate90(unsigned char *buffer, const unsigned int width, const unsigned int height)
{
const unsigned int sizeBuffer = width * height * 3;
unsigned char *tempBuffer = new unsigned char[sizeBuffer];
for (int y = 0, destinationColumn = height - 1; y < height; ++y, --destinationColumn)
{
int offset = y * width;
for (int x = 0; x < width; x++)
{
tempBuffer[(x * height) + destinationColumn] = buffer[offset + x];
}
}
// Copy rotated pixels
memcpy(buffer, tempBuffer, sizeBuffer);
delete[] tempBuffer;
}
Вы пробовали с небольшим массивом и разработали шаги, которые выполняются вручную? это было бы лучшим способом отладки этого типа проблемы. В любом случае, поскольку вы не знаете, есть ли у вас проблемы с кодом или проблема с реальной логикой, это было бы неплохо для начала. – NiRR
Кажется, что 3 байта используются для одного пикселя. Это отражается только в распределении 'sizeBuffer', но не в другом месте. – neverhoodboy