2013-12-10 2 views
0

Я пытаюсь перевернуть мое изображение на оси Y, и оно действительно переворачивается, но оно оставляет нечетные промежутки в середине и на правой стороне, оно не будет полностью переворачивать изображение целиком, я ограничу изображения до 450 на 450 и P3 ... Кто-нибудь есть какие-либо идеи, потому что мой алгоритм является правильнымИзображение переворачивается неправильно ... Почему?

for(j=0; j < imgur.width/2; j++) 
    { 
    for(i=0; i < imgur.height; i++) 
     { 
      temp.red = imgur.image[i][j].red; 
      imgur.image[i][j].red = imgur.image[i][imgur.height-j-1].red; 
      imgur.image[i][imgur.height-j-1].red = temp.red; 

      temp.green = imgur.image[i][j].green; 
      imgur.image[i][j].green = imgur.image[i][imgur.height-j-1].green; 
      imgur.image[i][imgur.height-j-1].green = temp.green; 

      temp.blue = imgur.image[i][j].blue; 
      imgur.image[i][j].blue = imgur.image[i][imgur.height-j-1].blue; 
      imgur.image[i][imgur.height-j-1].blue = temp.blue; 
    } 
    } 

Вот мой алгоритм ... До этого я распечатав P3, комментарий, ширину и высоту, и maxColor. Я использую две структуры для получения данных и чтения в файле из терминала ... Вот как я распечатываю данные. У кого-нибудь есть идеи?

for(i=imgur.height-1; i >= 0; i--) 
    { 
    for(j=0; j < imgur.width; j++) 
     { 
      printf("%i\n", imgur.image[i][j].red); 
      printf("%i\n", imgur.image[i][j].green); 
      printf("%i\n", imgur.image[i][j].blue); 
     } 
    } 
+0

Нормально ли читать изображение при переворачивании при печати? Вы читаете от последней строки до первой. – Bentoy13

+0

@ Печать и сканирование Bentoy13 (в которые я не включал), я сканирую и печатаю с наивысшей точки в столбце 0 и строке 0 и увеличивая скорость при печати/сканировании данных. Моя цель - в конечном счете перевернуть изображение, перемещая пиксели с правой стороны, влево. –

+0

Хм, для меня самая высокая точка изображения находится на 'image [0] [0]'. Здесь вы начинаете печатать на 'image [imgur.height-1] [0]'. Это действительно то, что вы хотите сделать? – Bentoy13

ответ

1

мой симметричный детектор смущен (в верхней части)

for(j=0; j < imgur.width/2; j++) { 
    for(i=0; i < imgur.height; i++) { 

и (в нижней части)

for(i=imgur.height-1; i >= 0; i--) { 
    for(j=0; j < imgur.width; j++) { 
+0

печатью и сканированием (что я не включил), я сканирование и печать с наивысшей точки в столбце 0 и строке 0 и приращение при печати/сканировании в данных. Но я щелкнул внутри самого алгоритма, который является for (j = 0

1

Вы сделали немного опечатка ошибку в флип алгоритм: когда вы переворачиваете вверх дном, вам нужно сканировать все линии целиком и половину высоты изображения, а не наоборот.

for(j=0; j < imgur.width; j++) 
{ 
    for(i=0; i < imgur.height/2; i++) 
    { 
    //code of your loop, removed for compactness 
    } 
} 

EDIT На самом деле, для левого правого свопинга, вы также инвертировать дополнение индекса j. j находится вдоль оси X, принадлежащей диапазону 0:width-1, поэтому дополнением является width-1-j.

Я закодировал версию этого алгоритма давно, это было похоже, что:

for (i=0; i!=h; i++) { 
    for (j=0; j!=w/2; j++) { 
     temp = src[i][w-1-j]; 
     dst[i][w-1-j] = src[i][j]; 
     dst[i][j] = temp; 
    } 
} 

Я думаю, что он работает нормально (Как вы работаете с пиксельной структурой, совершенно правильно поменять весь этот пиксель).

+0

Если я переворачиваю по оси Y, я считаю, что я перемещаюсь по высоте, а не по ширине, в конечном счете переворачиваю, как я делаю. –

+0

Если вы перевернете вдоль оси Y, вы поменяете левую и правую часть изображения. Если вы перевернете вдоль оси X, вы поменяете верхнюю и нижнюю часть изображения. Это не связано с тем, как вы сканируете изображение. – Bentoy13

+0

И как вы определяете оси Y и X? – Bentoy13