얼마전에 친구넘이 면접 때문에 잠시 집에 왔다가 갔다.
근데 그넘이 면접을 본 회사에서 내준 문제가 있는데 그게 이미지를 회전하는 소스를 짜라는 것이었다.
조건은 C로 짜야하고 90°, 180°, -90° 이렇게 3가지를 할 수 있게 만들라는 것이었다.

한번도 이런 이미지 프로세싱과 관련한 소스는 구경도 못 해봤고 어떤 로직이 들어가는지도 잘 모른다.
다행히도 이 친구넘은 이미지 프로세싱에 대해서 잘 알고 있었다. 소스로 구현만 하면 된다고 했다.
심심도 하고 할 일도 없어서 옆에서 로직을 설명 좀 해달라고 했다.

이미지 회전 로직:

난 이 90° 회전하는 소스만 되면 180° 는 90° 회전한 이미지를 한번더 90° 회전하면 되고 -90° 는 90° 회전을 3번하면 되지 않겠냐고 했다. 근데...
친구넘 왈: 그럼 퍼포먼스에 문제가 있다고 한다. --_-;
나: 아~ 젠장...

이미지 회전 소소: Dev-C++ Version 4.9.9.2 에서 C로 작성

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>

#define width 4
#define height 3

void printFunc(int, int, int[]);
void rightTurn(int, int, int[], int[]);

int main(int argc, char *argv[])
{
    int after[width*height] = {0};
    int before[] = {00, 01, 02, 03,
                    10, 11, 12, 13,
                    20, 21, 22, 23};
   
    printf("============= Before =============\n");
    printFunc(width, height, before);
   
    // 우측으로 90도 회전
    rightTurn(width, height, before, after);
     
    printf("============= After =============\n");

    printFunc(height, width, after);
   
    printf("Press ENTER to continue...\n");
    getchar();
    return 0;
}

void printFunc(int w, int h, int aa[])
{
    int i;
    for(i=0; i<w*h; i++)
    {
        if(i == (w*h)-1)
        {
            printf("%02d\n", aa[i]);      
        }
        else
        {
            if(0 == (i+1)%w)
            {
                printf("%02d,\n", aa[i]);                     
            }
            else
            {
                printf("%02d, ", aa[i]);     
            }
        }  
    }

    printf("Result: ");     
    for(i=0; i<w*h; i++)
    {
        if(i == (w*h)-1)
        {
            printf("%02d\n", aa[i]);     
        }
        else
        {
            printf("%02d, ", aa[i]);      
        }       
    }
}
void rightTurn(int w, int h, int before[], int after[])
{
    int i;
    int j;
    int resultCnt = 0;
    for(i=0; i<w; i++)
    {
        for(j=1; j<=h; j++)
        {
            after[resultCnt] = before[(w * h)-(w * j)+i];
            resultCnt++;
        }
    }   
}




'Dev > c, c++' 카테고리의 다른 글

3차원 배열을 동적할당 해보자...  (3) 2008.03.28
문자열 앞뒤 공백 지우기(수정)  (0) 2008.03.26
대부분의 형을 문자열로 바꾸기  (0) 2008.03.18

+ Recent posts