2013-07-20 2 views
2

Я работаю над проектом домашней работы, чтобы повернуть простой 2D-массив, содержащий значения RGB для файла PGM.Вращение массива изображений 2D PGM в C

Я прочитал много сообщений на этих форумах о том, как это сделать на C, и я почти получил его работу. Мой выходной файл имеет правильные размеры и поворачивается, но вокруг верхней и боковой сторон имеется толстая черная рамка. Я просто не могу понять, что я делаю неправильно.

Любая помощь была бы принята с благодарностью!

Я изменил код представил here, чтобы начать работу, и это rotate90 функция Я работаю сейчас:

PGMImage* rotate90(PGMImage *old_img) 
{ 
    int x, y; 
    PGMImage *new_img = malloc(sizeof(PGMImage)); 
    new_img->maxVal = old_img->maxVal; 
    new_img->width = old_img->height; 
    new_img->height = old_img->width; 
    for (x = 0; x < old_img->width; x++) 
    { 
     for (y = 0; y < old_img->height; y++) 
     { 
      new_img->data[old_img->height - 1 - y][x].r = old_img->data[x][y].r; 
      new_img->data[old_img->height - 1 - y][x].g = old_img->data[x][y].g; 
      new_img->data[old_img->height - 1 - y][x].b = old_img->data[x][y].b; 
     } 
    } 
    return new_img; 
} 

void main() 
{ 
    PGMImage* img = malloc(sizeof(PGMImage)); 
    getPGMfile("columns.pgm", img); 
    save("columns_new.ppm", rotate90(img)); 
} 

save() и getPGMfile() функции работают отлично самостоятельно.
Только когда я передаю результат своей rotate90() функции save(), я получаю напуганные результаты.

+0

Вы выделяете пространство для массива '.data'? –

+0

Спасибо за вопрос luser droog. Массив 'data' выделяется в 800 x 800 в типе' PGMImage' typedef (в файле заголовка). Я работаю только с изображениями макс. Размера 640 x 480. – deeprog

ответ

0

Как насчет пробовать memcpy(new_img, old_img, sizeof(PGMImage) после malloc заявление. Возможно, некоторые другие атрибуты, кроме ширины и высоты, не инициализируются. А также, если переменная data указатель, вы malloc кусок памяти для data для объекта new_img?

+0

Спасибо за предложение WDan. Я добавил код 'memcopy', который вы предложили, но ничего не изменил - единственными атрибутами' PGMImage' являются 'maxVal',' width', 'height' и' data' (который представляет собой 2D-массив структур, содержащий 'r'' g' и 'b' ints). – deeprog

Смежные вопросы