Во встроенном приложении C у меня есть большое изображение, которое я хотел бы поворачивать на 90 градусов. В настоящее время я использую известный простой алгоритм для этого. Однако этот алгоритм требует от меня сделать еще одну копию изображения. Я бы хотел избежать выделения памяти для копии, я бы скорее поместил ее на место. Поскольку изображение не является квадратным, это сложно. Кто-нибудь знает подходящий алгоритм?
Отредактировано для добавления разъяснений, потому что люди спрашивают:
Я сохраняю изображение в обычном формате:
// Images are 16 bpp
struct Image {
int width;
int height;
uint16_t * data;
};
uint16_t getPixel(Image *img, int x, int y)
{
return img->data[y * img->width + x];
}
Я надеюсь переместить содержимое массива data
, а затем поменять переменные-члены width
и height
. Поэтому, если я начну с изображения размером 9x20 пикселей, а затем поверните его, я получаю изображение размером 20x9 пикселей. Это изменяет шаг изображения, что усложняет алгоритм.