Closed james-sungjae-lee closed 5 years ago
https://stackoverflow.com/questions/22318389/pass-system-date-and-time-as-a-filename-in-c
해당 자료를 참고 및 활용하여 저장이 가능할 것으로 보인다.
하지만 해당 데이터는 년, 월, 일에 대해서만 나타나 있기 때문에
시간, 분, 초, 밀리초 까지 인식하는 과정이 필요하다.
해당 코드를 참고하여 filename 이름의 char 배열을 생성하였다.
time_t t = time(0); struct tm* now = localtime(&t) char filename[80]; strftime (filename, 80, "%Y%m%d-%H%M%S.PNG", now);
해당 코드를 filename 이 사용되기 이전의 for loop 밖에 작성하고, filename 변수를 사용하면 된다. 이 때, PNG 와 같은 이미지 확장자를 명시하지 않으면 저장되지 않는다는 점을 확인할 수 있었다.
추가적으로 %L 을 이용하면 밀리초의 작성이 가능하다고 확인하였으나, 정확하지 않은 정보였다.
이미지 cropping 하기 이전 단계에서 filename 을 확인하기 위한 테스트 진행 상황이다.
밀리초의 작성과 관련하여서는 다음의 링크를 참고할 수 있을 것으로 보인다.
https://codereview.stackexchange.com/questions/11921/getting-current-time-with-milliseconds
해당 사항에 대한 구현은 다음과 같이 이루어졌다.
이미지 데이터를 저장하기 위해 저장될 이미지 파일명을 detect 된 시간으로 지정하기 위해 먼저 curTime 을 이용하여 milli 초를 계산하여 milli 변수에 저장한다.
timeval curTime; gettimeofday(&curTime, NULL); int milli = curTime.tv_usec / 1000;
그 다음, 현재 시간을 local time 에 맞추어 now 변수에 저장한다.
time_t t = time(0); struct tm* now = localtime(&t);
그리고 밀리초를 제외한 파일명(년, 월, 일, 시, 분, 초)를 buffer 배열에 저장한다.
char buffer[80];
밀리초를 제외한 시간을 strftime 을 이용하여 now 로부터 시간을 가져와 buffer 에 저장한다.
strftime(buffer, 80, "%Y%m%d-%H%M%S", now);
밀리초와 이미지 확장자를 추가하여 filename 배열에 저장한다.
char filename[100]; sprintf(filename, "%s%d.PNG", buffer, milli);
그 결과, filename 에는 적절한 밀리초가 합쳐진 데이터가 char 배열 형태로 입력되게 된다.
실험 결과는 다음과 같다.
시간에 따라 이미지를 저장하기 위해서는
단일 Filename 이 아닌 실시간으로 변화하는 filename 이 필요하다
이를 해결하기 위해 현재 시간을 확인하고, 이를 char[] 형태로 변환하는 과정이 필요하다
관련 자료는 strftime 을 이용한다는 것 까지 조사하였다.