CanvasBitmap 는 압축된 비트맵 차단을 지원합니다. 이것들은 DDS 파일에서 로드하거나 CreateFromBytes(ICanvasResourceCreator,Byte[], Int32, Int32, DirectXPixelFormat)를 사용하여 생성할 수 있습니다.
블록 압축 비트맵은 메모리를 적게 사용하고 더 효율적으로 그릴 수 있기 때문에 비트맵이 많은 애플리케이션(예: 게임)에 적합합니다. 블록 압축 비트맵은 압축되지 않은 비트맵 메모리의 최대 1/8번째 메모리를 사용합니다. 따라서 GPU는 비트맵을 그릴 때 훨씬 적은 메모리에 액세스해야 하므로 그리기 속도가 빨라집니다.
블록 압축에 대해
블록 압축은 PNG 또는 JPG 파일에서 사용하는 압축과 다릅니다. 압축된 파일 형식은 압축된 상태로 저장되지만 Win2D에 의해 로드되면 픽셀당 32비트(4바이트)를 사용하는 등의 DirectXPixelFormat::B8G8R8A8UIntNormalized형식으로 비트맵으로 압축 해제됩니다. 따라서 256x256 비트맵은 256 * 256 * 4 = 262,144 바이트를 차지합니다.
블록 압축 비트맵은 4x4 픽셀 블록을 저장하기 위해 8 또는 16바이트(형식에 따라 나중에 자세히)를 사용합니다. 따라서 이 경우 256x256 비트맵은 256 * 256 / (4 * 4) * 8 = 32,768 바이트 또는 256 * 256 / (4 * 4) * 16 = 65,536 바이트를 차지합니다. 최대 8배 더 작습니다! 블록 압축은 GPU 하드웨어에서 직접 지원되므로 비트맵을 완전히 압축 해제하지 않고도 메모리에서 압축하고 압축된 형식에서 직접 그릴 수 있습니다.
Win2D는 세 개의 블록 압축 형식을 지원합니다. 아래 표에서는 비교를 위해 압축되지 않은 형식과 함께 이러한 형식에 대해 설명합니다.
DirectXPixelFormat |
4x4 비트맵의 크기 | 256x256 비트맵의 크기 | Alpha |
|---|---|---|---|
BC1Unorm |
8바이트 | 32,768바이트 | 1비트 |
BC2Unorm |
16바이트 | 65,536바이트 | 4비트 |
BC3Unorm |
16바이트 | 65,536바이트 | ~8비트(압축) |
B8G8R8A8UintNormalized |
64바이트 | 262,144바이트 | 8비트 |
BC1Unorm는 BC2UnormBC3Unorm 알파를 지원하는 방법에 따라 크게 다릅니다. BC1은 1비트 알파만 지원합니다. BC2는 고유한 4비트 알파 값을 갖는 블록의 각 픽셀을 지원합니다. BC3은 알파 값을 압축합니다.
블록 압축 작동 방식에 대한 자세한 내용은 Direct2D 블록 압축 설명서 및 Direct3D 블록 압축 설명서를 참조하세요.
Restrictions
- 모든 블록 압축 텍스처는 너비와 높이가 4의 배수여야 합니다. 블록 압축은 4x4 픽셀 블록에서 작동하기 때문입니다.
- 블록 압축 텍스처의 부분 사각형에 대해 수행하는 모든 작업(
GetPixelBytes(),SetPixelBytes(Byte[]),CopyPixelsFromBitmap(CanvasBitmap, Int32, Int32)사용)은 해당 부분 사각형이 4픽셀 경계에 정렬되어 있어야 합니다. - Win2D에는 블록 압축 형식을 사용할 때 미리 곱한 알파가 필요합니다.
DDS 파일 작성
블록 압축 이미지는 DDS 파일에 저장할 수 있습니다. 이러한 파일은 Photoshop 또는 Paint.NET 같은 애플리케이션에 대한 플러그 인을 통해 생성할 수 있지만 결과 파일이 미리 곱한 알파로 저장되도록 주의해야 합니다. Win2D는 BC1Unorm, BC2Unorm 또는 BC3Unorm 이미지가 포함된 모든 DDS 파일을 로드하고, 해당 파일이 미리 곱해진 알파로 작성된 것으로 가정합니다.
C++ 프로젝트를 작성하는 경우 Visual Studio 설명서에 설명된 대로 이미지 콘텐츠 파이프라인을 사용하여 이미지를 변환할 수 있습니다.
또는 https://github.com/Microsoft/DirectXTex에서 texconv.exe을 사용할 수 있습니다.
texconv.exe 는 DirectXTex_Desktop_2015.sln 솔루션을 사용하여 빌드할 수 있습니다. 다음 명령은 "smoke.png"를 프리멀티플라이드 알파가 적용된 BC3Unorm로 변환합니다.
texconv -pmalpha -m 1 -f BC3_UNORM smoke.png
Windows developer