컨텐츠로 건너뛰기

아키텍처

빠른 요약

  • 핵심 API: IThumbnailProvider, IInitializeWithStream, IQueryInfo
  • 아카이브 계층: ZIP/RAR/7z 어댑터
  • 이미지 파이프라인: image + fast_image_resize, Explorer용 HBITMAP 출력

CBXShell은 최신 Windows 셸 확장 인터페이스와 ZIP/RAR/7z를 위한 트레이트 기반 아카이브 계층을 구현합니다.

COM 구현

  • IThumbnailProvider: 썸네일 추출
  • IInitializeWithStream: 스트림 기반 아카이브 접근
  • IQueryInfo: 툴팁 메타데이터 제공

호환성을 위해 기존 인터페이스도 유지됩니다:

  • IPersistFile
  • IExtractImage2

아카이브 지원

아카이브 계층은 다음과 같은 통합 트레이트 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: zip crate
  • Rar: unrar crate
  • 7z: sevenz-rust crate

이미지 처리

  • 하이브리드 디코딩 파이프라인:
    • 우선 경로: Windows WIC 디코더 (OS 코덱 사용, 최신 코덱 지원은 선택적)
    • 대체 경로: Rust image crate 디코더
  • WebP, AVIF, JPEG, PNG, GIF, BMP, TIFF, ICO 지원 (WIC 경로는 OS 코덱 설치 상태에 따라 달라질 수 있음)
  • fast_image_resize 기반 고품질 리사이즈 (Lanczos3)
  • Explorer 통합을 위한 HBITMAP 생성

WIC 우선 경로를 쓰는 이유

  • 외부 코덱 스택을 번들링하는 방식 대비 바이너리 크기 이점이 있습니다.
  • Windows에 설치된 코덱 업데이트(예: AVIF 코덱)를 활용할 수 있습니다.
  • WIC 디코딩 실패 시 자동 fallback으로 기존 호환성을 유지합니다.