Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Protocol
- 클린 코드
- combine
- swiftUI
- SWIFT
- uiscrollview
- UICollectionView
- ribs
- Refactoring
- swift documentation
- UITextView
- rxswift
- map
- Human interface guide
- 리팩토링
- 스위프트
- HIG
- clean architecture
- tableView
- Clean Code
- MVVM
- 애니메이션
- Observable
- 리펙토링
- 리펙터링
- uitableview
- RxCocoa
- collectionview
- Xcode
- ios
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] CGImage와 UIImage 개념 이해하기 (고수준 레벨과 저수준 레벨) 본문
CGImage와 UIImage 개념
- UIImage와 CGImage 모두 이미지에 관한 데이터를 갖고 있는 인터페이스
- UIImage 데이터가 있으면 CGImage 인스턴스로 변환도 가능
private let image = UIImage(named: "tree")!
let cgImage = image.cgImage
- UIImage는 cgImage를 wrapping한 형태이며, UI를 그릴때 더욱 고수준 레벨로 인터페이스를 제공하여 UI 작업에 집중할 수 있게 해놓은 것
- cgImage는 UI를 그리는 인터페이스 외에도 bits와 같은 저수준 레벨의 세부 데이터 접근을 위해서 있는 것
가장 대표적인 예) size 값
- UIImage의 size 프로퍼티를 사용하면 디바이스의 scale 값을 고려하지 않은 값을 얻어옴
- x2 스케일을 사용하는 iPhone SE, x3 스케일을 사용하는 iPhone 15 Pro 에서 모두 (800, 800)이 출력됨
private let image = UIImage(named: "tree")!
print(image.size) // (800, 800)
print(image.scale) // 3
- 하지만 cgImage를 사용하면 scale을 고려한 값으로 출력됨
// iPhone SE
print(image.cgImage!.height, image.cgImage!.width) // (1600, 1600)
// iPhone 15 Pro
print(image.cgImage!.height, image.cgImage!.width) // (2400, 2400)
- 이렇게 된 이유?
- UIImage는 고수준 레벨로, UI를 그리는데에 집중해놓은 것 (보통 autolayout으로 뷰를 그릴때도 scale을 고려하지 않고 120의 크기로 고정해놓으면 디바이스에 따라 알아서 배치가 되는 원리와 동일)
- cgImage는 저수준 레벨로, 이미지의 bits와 같은 데이터 접근이 가능한 것
- 실제로 UIImage의 개발 문서를 보면 UIImage는 이미지 데이터의 저수준 레벨에 있는 데이터를 직접적으로 접근하는 인터페이스를 숨기고 CGImage나 CIIMage로 접근해야지 사용이 가능
* 참고
'iOS 응용 (swift)' 카테고리의 다른 글
Comments