본 자료는
1. 이미지 사용 방식과 장단점
2. 이미지 사용 방식에 따른 각종 수치 비교
3. 예제 설명
3-1. 주요 구현 방법 설명
3-2. 주요 소스 코드
순서로 진행합니다.
이미지 사용 방식은 크게 리소스 이미지를 바로 호출하는 방식과 리소스 이미지를 인스턴스화하여 사용하는 방식 두 가지로 나눌 수 있습니다. 이 두 방식은 사용 용도에 따라 출력 속도, 가용 메모리, 부팅 속도 등에 영향을 줄 수 있으며 상세 내용은 아래 표와 같습니다.
항목 | 리소스 이미지를 바로 사용 |
리소스 이미지를 인스턴스화하여 사용 |
---|---|---|
설명 | 이미지를 출력할 때마다 리소스의 이미지를 호출하여 사용하는 방식 |
리소스의 이미지를 배열이나 객체에 미리 인스턴스화 해놓고 출력할 때 호출하는 방식 |
장점 | 상시 가용 메모리가 늘어난다. | 이미지 출력 속도가 빠르다. |
단점 | 이미지 출력 속도가 느리다. | 상시 가용 메모리가 줄어든다. |
2. 이미지 사용 방식에 따른 각종 수치 비교
아래 표는 첨부한 예제를 IEC1000-Series에 저장하고 런타임 모드로 실행했을 때 측정한 결과이며, 측정 항목과 설명은 다음과 같습니다.
- 상시 가용 메모리 : 리소스 이미지를 인스턴스화하여 사용할 때는 RAM에 미리 저장하여 사용하므로 리소스 이미지를 바로 사용할 때보다 가용 메모리가 더 적습니다.
- 부팅 시간 : IEC1000-Series 기준으로 예제를 런타임 모드로 실행했을 때 폼이 완전히 로드될 때까지의 시간입니다.
- 실 사용 가능 시간 : 리소스 이미지를 바로 사용하는 경우 리소스 이미지를 인스턴싱할 필요가 없으므로 부팅 후 프로그램을 바로 사용할 수 있지만, 리소스 이미지를 인스턴스 하여 사용하는 경우
인스턴싱 시간이 추가로 소요됩니다. 본 예제에서는 800*480 사이즈의 Bitmap 이미지 10개 총 10.9MB 크기의 이미지들을 폼 로드 후 SmartThread에서 일괄로 인스턴스화합니다.
- 반복 출력 횟수별 소요 시간 : 여러 이미지를 일정 횟수만큼 반복적으로 출력할 때 소요 시간을 방식별로 측정한 결과입니다.
- 버튼 개수별 이미지 변경 소요 시간 : 일정 개수의 SmartButton.UpImage를 특정 이미지로 일괄 변경할 때 소요 시간을 방식별로 측정한 결과입니다.
항목 | 리소스 이미지를 바로 사용 | 리소스 이미지를 인스턴스화하여 사용 | |
---|---|---|---|
상시 가용 메모리 | 94.55% | 89.02% | |
부팅 시간(폼 로드 시간) | 14.75초 | 16.74초 | |
실 사용 가능 시간 | 바로 사용 가능 | 폼 로드 후 5.54초 | |
반복 출력 횟수별 |
500회 | 13.47초 | 1.25초 |
1000회 | 27.61초 | 2.48초 | |
2000회 | 55.69초 | 4.96초 | |
버튼 개수별 이미지 변경 소요 시간 |
28개 | 0.111 ~ 0.152초 | 0.030초 |
56개 | 0.222 ~ 0.485초 | 0.062초 | |
84개 | 0.333 ~ 0.691초 | 0.093초 |
3. 예제 설명 3-1. 주요 구현 방법 설명
리소스는 배포될 때 실행 파일(exe 파일)안에 저장되어 배포됩니다. 프로그램을 실행하고 리소스 파일에 접근하게 되면 RAM(Program Memory)에 접근하는 것이 아닌 실행 파일이 위치한 물리적인 저장소(Flash Disk, SD Card, USB)에 접근하여 리소스 파일을 불러오게 됩니다. 이 작업은 RAM에서 데이터를 불러오는 작업보다 처리 속도가 느리기 때문에 이미지 출력 속도가 느려지게 됩니다. 즉, 사용할 이미지를 RAM에 미리 할당하고(인스턴싱) 호출하게 되면 이미지 출력 속도를 크게 개선시킬 수 있습니다.
- ImageListIndexIncType : 이미지 인덱스의 카운팅 방식을 설정합니다.
- AddImageList() : 이미지 객체를 리스트에 추가합니다.
- ImageListClear() : 리스트에 추가된 이미지를 모두 제거합니다.
- ImageListDraw() : 리스트에 추가된 이미지를 인덱스를 지정해 출력합니다.
- ImageListDrawNext() : 리스트에 추가된 이미지를 ImageListIndexIncType에서 설정된 카운팅 방식에 따라 차례대로 출력합니다.
- SlideShowStart/Stop() : 일정 시간마다 리스트에 추가된 이미지를 ImageListIndexIncType에서 설정된 카운팅 방식에 따라 차례대로 출력합니다.
※ 자세한 내용은 SmartX 프로그래밍 가이드의 SmartDraw를 참고하시기 바랍니다.