
SkBitmap은 Skia 그래픽 라이브러리에서 픽셀 데이터를 CPU 메모리 쪽에 저장·관리하는 비트맵(이미지) 객체입니다. 핵심적으로는 화면에 그리거나 읽고 쓸 수 있는 정사각형/직사각형 픽셀 버퍼와 그에 대한 메타데이터(너비·높이·픽셀 포맷·알파 타입·rowBytes 등)를 함께 캡슐화합니다. 주요 개념 요약 - 역할: CPU 메모리상의 픽셀 버퍼(비트맵)를 소유하거나 래핑(wrap)하여 읽기/쓰기와 전달을 가능하게 함. - 이미지 정보: SkImageInfo(너비·높이·SkColorType·SkAlphaType 등)로 픽셀 포맷을 정의. - 메모리/소유권: 내부적으로 SkPixelRef(또는 유사한 참조)로 픽셀 메모리를 관리(참조계수). 따라서 SkBitmap의 복사는 기본적으로 "얕은 복사"(픽셀 메모리 공유)입니다. 완전한 복사(깊은 복사)가 필요하면 copyTo 같은 API를 사용해야 함. - 외부 버퍼 래핑: installPixels(또는 유사 API)을 통해 외부가 할당한 메모리를 SkBitmap으로 래핑할 수 있음. 이 경우 외부 버퍼의 수명 관리는 호출자 책임. - 접근/조작: getPixels, getAddr32/getAddr8, peekPixels, readPixels/ writePixels 등으로 픽셀에 접근. 픽셀 포맷(color type)에 따라 접근 방식이 달라짐(kN32 등). - SkPixmap과의 관계: SkPixmap은 비소유(non-owning) 읽기 전용 뷰로, SkBitmap은 소유 가능한 컨테이너. 읽기 전용 작업에는 SkPixmap 사용을 권장. - SkImage과의 차이: SkImage는 불변(immutable) 또는 GPU/비디오 메모리에 있을 수 있는 이미지 표현에 더 적합. SkBitmap은 주로 CPU 메모리의 가변 비트맵. - 동기화/스레드: 픽셀을 변경하는 작업은 동기화 필요. 얕은 복사로 여러 참조가 있을 때 한 쪽에서 변경하면 다른 참조에 영향이 있음(필요 시 notifyPixelsChanged 호출). 실무상 유의점 - 포맷 확인: 픽셀 포맷(SkColorType)과 알파 타입(SkAlphaType)을 명확히 해야 올바르게 읽고 쓸 수 있음. - 메모리 할당: tryAllocPixels/allocPixels 등으로 메모리 할당. 큰 비트맵은 메모리 비용 큼. - 복사와 공유: 단순 대입은 메모리 공유. 독립 복사 필요하면 copyTo 또는 별도 할당 후 복사. - GPU 사용 시: GPU 텍스처로 올리거나 GPU에서 바로 사용하고 싶다면 SkImage(또는 GPU 관련 API)로 변환. 간단한 사용 흐름(개념) - 비트맵 생성/설정: setInfo(또는 SkImageInfo 생성) → tryAllocPixels/allocPixels - 픽셀 접근: getAddr32/peekPixels/SkPixmap로 읽기·쓰기 - 다른 API와 연동: SkCanvas::drawBitmap, SkImage::MakeFromBitmap 등으로 그리기 또는 GPU 변환 요약하면, SkBitmap은 Skia에서 CPU 메모리 기반 비트맵을 표현하는 기본 컨테이너로, 픽셀 포맷 정보와 메모리 소유권을 관리하고 읽기/쓰기·공유·래핑 기능을 제공하는 클래스입니다.