아키텍처
빠른 요약
- 핵심 API:
IThumbnailProvider,IInitializeWithStream,IQueryInfo - 아카이브 계층: ZIP/RAR/7z 어댑터
- 이미지 파이프라인:
image+fast_image_resize, Explorer용 HBITMAP 출력
CBXShell은 최신 Windows 셸 확장 인터페이스와 ZIP/RAR/7z를 위한 트레이트 기반 아카이브 계층을 구현합니다.
COM 구현
IThumbnailProvider: 썸네일 추출IInitializeWithStream: 스트림 기반 아카이브 접근IQueryInfo: 툴팁 메타데이터 제공
호환성을 위해 기존 인터페이스도 유지됩니다:
IPersistFileIExtractImage2
아카이브 지원
아카이브 계층은 다음과 같은 통합 트레이트 API를 제공합니다:
pub trait Archive: Send { fn find_first_image(&mut self, sort: bool) -> Result<ArchiveEntry>; fn extract_to_memory(&mut self, entry: &ArchiveEntry) -> Result<Vec<u8>>; fn get_info(&self) -> Result<ArchiveInfo>;}구현체:
- Zip:
zipcrate - Rar:
unrarcrate - 7z:
sevenz-rustcrate
이미지 처리
- 하이브리드 디코딩 파이프라인:
- 우선 경로: Windows WIC 디코더 (OS 코덱 사용, 최신 코덱 지원은 선택적)
- 대체 경로: Rust
imagecrate 디코더
- WebP, AVIF, JPEG, PNG, GIF, BMP, TIFF, ICO 지원 (WIC 경로는 OS 코덱 설치 상태에 따라 달라질 수 있음)
fast_image_resize기반 고품질 리사이즈 (Lanczos3)- Explorer 통합을 위한 HBITMAP 생성
WIC 우선 경로를 쓰는 이유
- 외부 코덱 스택을 번들링하는 방식 대비 바이너리 크기 이점이 있습니다.
- Windows에 설치된 코덱 업데이트(예: AVIF 코덱)를 활용할 수 있습니다.
- WIC 디코딩 실패 시 자동 fallback으로 기존 호환성을 유지합니다.