LINUX.ORG.RU

зеркальное отражение массивa по вертикали

 imagej,


0

1

Притсвую.

Имеется картинка предствленная в виде массива ([]). Вот код, который зеркалит картинку по горизонтали(елементарно в общем). Я хочу ещё так-же, только по вертикали. В общем нужна формула для нахождения элемента с которым нужно поменять текущий. Уже час как буксую.

		for (int i=roi.y; i<roi.y+roi.height; i++){
			int offset = i*w;
			for (int j=roi.x; j<(roi.x+roi.width)/2; j++) {
				int pos = offset + j;
				int last = offset + (roi.x+roi.width)-j;
				int temp = pixelsv[pos];
				pixelsv[pos] = pixelsv[last-1];
				pixelsv[last-1] = temp;
			}
		}
★★★

Притсвую.

Хм.. «притворствую»?

anonymous
()

может так?
[code=c]
for (int i=roi.x; i<roi.x+roi.width; i++){
int offset = i*h;
for (int j=roi.y; j<(roi.y+roi.height)/2; j++) {
int pos = offset + j;
int last = offset + (roi.y+roi.height)-j;
int temp = pixelsv[pos];
pixelsv[pos] = pixelsv[last-1];
pixelsv[last-1] = temp;
}
}
[/code]

Bad_ptr ★★★★★
()

Вот вам псевдокод, нужна только vert:

width  = 5
height = 2

image_in  = range(width * height)
image_out = [0] * len(image_in)

def view(img):
    if img:
        print img[:width]
        view(img[width:])

def vert(img):
    for y in range(height):
        for x in range(width):
            image_out[(height-1-y)*width + x] = image_in[y*width + x]

view(image_in)
print
vert(image_in)
view(image_out)
anonymous
()
Ответ на: комментарий от anonymous

Спасибо тебе, добрый аномим ;)

@Bad_ptr

нет, так не работает.

hope13 ★★★
() автор топика

[code] // normal default: std::memcpy(dst, src, size); break;

// vertical case 1: for(int offset = 0; offset < size; offset += pitch) memcpy(dst + size - pitch - offset, src + offset, pitch); break;

// horizontal case 2: for(int offset = 0; offset < size; offset += bpp) memcpy(dst + (offset % pitch) + size - pitch - (offset / pitch) * pitch, src + size - offset - bpp, bpp); break;

// both case 3: for(int offset = 0; offset < size; offset += bpp) memcpy(dst + offset, src + size - offset - bpp, bpp); break; [/code]

anonymous
()
            // normal
            default:
                std::memcpy(dst, src, size);
                break;

            // vertical
            case 1:
                for(int offset = 0; offset < size; offset += pitch)
                    memcpy(dst + size - pitch - offset,
                        src + offset, pitch);
                break;

            // horizontal
            case 2:
                for(int offset = 0; offset < size; offset += bpp)
                    memcpy(dst + (offset % pitch) +
                        size - pitch - (offset / pitch) * pitch, src + size - offset - bpp, bpp);
                break;

            // both
            case 3:
                for(int offset = 0; offset < size; offset += bpp)
                    memcpy(dst + offset, src + size - offset - bpp, bpp);
                break;
anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.