Page 17 -
P. 17
이미지의 포맷을 알았으면 다음에는 이미지의 각 점에 대한 정보를 얻어와야 합니다. 점은 픽
셀이라고 하며 색상 정보가 담겨 있습니다. 이제 이미지에서 픽셀의 색상 정보를 하나씩 얻어
온 뒤 그에 맞는 특수 문자로 출력하면 됩니다. 사실 특수 문자로 출력하는 것은 약간의 트릭이
필요합니다. 어떻게 변환하느냐에 따라 텍스트의 전체 모양이 원본 이미지와 비슷한지를 결정
합니다. 우리는 간단하게 색상 정보에 따라 진한가, 흐린가만 표현하겠습니다.
지금까지 설명한 작은 문제들을 정리하면 다음과 같습니다.
• 이미지 포맷 알아내기
• 픽셀의 색상을 얻어오기
• 픽셀의 색상에 따라 특수 문자로 출력하기
이렇게 나눈 작은 문제를 해결하다 보면 이미지를 아스키 아트로 변환하는 문제가 해결됩니다.
이처럼 현실 세계의 문제를 분석하여 해결책을 찾는 과학적 사고법을 컴퓨테이셔널 씽킹
(computational thinking)이라 하며 이렇게 설계한 해결책을 컴퓨터의 명령어로 작성하는 것을
컴퓨터 프로그래밍이라 합니다.
▼ 그림 1-5 해결책을 컴퓨터의 명령어로 작성
문제의 해결책 컴퓨터의 명령어
int main()
{
fpBmp = fopen("Lenna80x80.bmp", "rb");
...
• 이미지 포맷 알아내기
• 픽셀의 색상을 얻어오기 if (fileHeader.bfType != 'MB')
• 픽셀의 색상에 따라 특수문자로
...
출력하기
fseek(fpBmp, fileHeader.bfOffBits, SEEK_SET);
fread(image, size, 1, fpBmp);
...
RGBTRIPLE * pixel = (RGBTRIPLE * )&image[index];
...
char c = ascii[gray * sizeof(ascii) / 256];
fprintf(fpTxt, "%c%c", c, c);
return 0;
}
즉, 작은 문제로 분해하고, 문제의 패턴을 발견하고, 어떤 데이터를 이용할지 결정하고, 문제를
일반화하고 모델링할 수 있는지를 찾는 과정이죠. 다음과 같이 이미지를 아스키 아트로 변환하
는 작업을 패턴, 데이터, 일반화와 모델링으로 구분할 수 있습니다.
024 프로그래머를 향한 출발점 COS Pro 2급
cos pro 2급(C 언어 본문).indb 24 2018-02-02 오전 10:01:48