Я пытаюсь создать функцию для транспонирования на месте растрового изображения. Но пока что результат, который я получаю, весь перепутан, и я не могу найти, что я делаю не так.
Исходные растровые изображения представляют собой массив пикселей размером 1d в формате ARGB.
void transpose(uint8_t* buffer, const uint32_t width, const uint32_t height)
{
const size_t stride = width * sizeof(uint32_t);
for (uint32_t i = 0; i < height; i++)
{
uint32_t* row = (uint32_t*)(buffer + (stride * i));
uint8_t* section = buffer + (i * sizeof(uint32_t));
for (uint32_t j = i + 1; j < height; j++)
{
const uint32_t tmp = row[j];
row[j] = *((uint32_t*)(section + (stride * j)));
*((uint32_t*)(section + (stride * j))) = tmp;
}
}
}
ОБНОВЛЕНИЕ:
Чтобы уточнить и избежать путаницы, поскольку некоторые люди думают, что это просто вопрос о повороте изображения. Транспонирование изображения состоит из двух преобразований: 1) перевернуть по горизонтали 2) повернуть на 90° против часовой стрелки. (Как показано в примере изображения, см. направления стрелок)
height != widht
, поэтому не совсем понятно, что вы имеете в виду под "на месте" - person 463035818_is_not_a_number   schedule 16.10.2018uint32_t
- это значительно упростит ваш код. б) найдите и прочитайте Как отлаживать небольшие программы Эрика Липперта в) пошаговый алгоритм для простого растрового изображения 2x3 - либо в отладчике, либо на бумаге. - person Martin Bonner supports Monica   schedule 16.10.2018