2017-01-11 5 views
0

У меня большие проблемы с пониманием того, что делает (imageptt->h/4) + (i/2) в:отдела в фрагменте кода

for(int i= 0; i < imageptt->h; i++) 
{ 
    for(int j = 0; j < imageptt->w; j++) 
    { 
     pixels[i][j] = old[(imageptt->h/4) + (i/2)] 
            [(imageptt->w/4) + (j/2)]; 
    } 
} 
+0

Это линейное отображение координат, где пиксели уменьшаются в два раза и сдвигаются на четверть от общего размера. – Trilarion

ответ

0

Что кажется, делает этот код, чтобы установить new_pixels в центральной четверти old_pixels, масштабируется до такой же размер.

Например, если old_pixels является:

ABCDEFGH 
IHJKLMNO 
PQRSTUVW 
XYZabcde 
fghijklm 
nopqrstu 
vwxyz012 
3456789* 

Затем new_pixels будет установлен в

RRSSTTUU 
RRSSTTUU 
ZZaabbcc 
ZZaabbcc 
hhiijjkk 
hhiijjkk 
ppqqrrss 
ppqqrrss 

(при условии, что есть внешний цикл по строкам изображения).

Добавление (image_ptr->height/4) и (image_ptr->width/4) к показателям начинает отсчет со смещения 1/4 пути вертикально и горизонтально в old_pixels. Разделив (i/2) и (j/2) масштабирует изображение вверх в 2 раза

0

Код сниппета немного странно, как это по умолчанию на тех случаях, когда я и J не являются даже - это может быть преднамеренным, но выглядит как ошибка. Похоже, новые пиксели пытаются получить центральную четверть старых пикселей, но из-за нечетные индексы, каждый пиксель будет пройдено дважды

если старые пиксели были:

A A B B C C D D 
A A B B C C D D 
A A B B C C D D 
A A B B C C D D 
A A B B C C D D 
A A B B C C D D 
A A B B C C D D 
A A B B C C D D 

новых пиксели будет

B B B B C C C C 
B B B B C C C C 
B B B B C C C C 
B B B B C C C C 
B B B B C C C C 
B B B B C C C C 
B B B B C C C C 
B B B B C C C C