비트맵 소스 효과
비트맵 소스 효과를 사용하여 효과 그래프의 입력으로 사용할 IWICBitmapSource에서 ID2D1Image를 생성합니다. 이 효과는 CPU에서 크기 조정 및 회전을 수행합니다. 또한 필요에 따라 시스템 메모리 밉맵을 생성할 수 있으며, 이는 다양한 감소된 해상도에서 매우 큰 이미지를 적극적으로 크기 조정하기 위한 성능 최적화가 될 수 있습니다.
참고
비트맵 소스 효과는 해당 입력을 이미지 입력이 아닌 속성으로 사용합니다. SetInput 메서드가 아닌 SetValue 메서드를 사용해야 합니다. WicBitmapSource 속성은 이미지 입력 데이터를 지정하는 위치입니다.
이 효과의 CLSID는 CLSID_D2D1BitmapSource.
효과 속성
표시 이름 및 인덱스 열거형 | Description |
---|---|
WicBitmapSource D2D1_BITMAPSOURCE_PROP_WIC_BITMAP_SOURCE |
로드할 이미지 데이터를 포함하는 IWICBitmapSource 입니다. 형식은 IWICBitmapSource입니다. 기본값은 NULL입니다. |
확장 D2D1_BITMAPSOURCE_PROP_SCALE |
X 및 Y 방향의 배율 크기입니다. 이 효과는 너비를 X 값으로 곱하고 높이를 Y 값으로 곱합니다. 이 속성은 (X 배율, Y 배율)로 정의된 D2D1_VECTOR_2F. 배율 크기는 FLOAT이고 단위가 없으며 양수 또는 0이어야 합니다. 형식이 D2D1_VECTOR_2F. 기본값은 {1.0f, 1.0f}입니다. |
InterpolationMode. D2D1_BITMAPSOURCE_PROP_INTERPOLATION_MODE |
이미지 크기를 조정하는 데 사용되는 보간 모드입니다. 자세한 내용은 보간 모드를 참조하세요. 모드에서 Mipmap을 사용하지 않도록 설정하면 BitmapSouce는 Scale 및 EnableDPICorrection 속성에 의해 결정되는 해상도로 이미지를 캐시합니다. 형식이 D2D1_BITMAPSOURCE_INTERPOLATION_MODE. 기본값은 D2D1_BITMAPSOURCE_INTERPOLATION_MODE_LINEAR. |
EnableDPICorrection D2D1_BITMAPSOURCE_PROP_ENABLE_DPI_CORRECTION |
이 값을 TRUE로 설정하면 IWICBitmapSource 에서 보고한 DPI를 디바이스 컨텍스트의 DPI로 변환하도록 입력 이미지의 크기가 조정됩니다. 효과는 InterpolationMode 속성을 사용하여 설정한 보간 모드를 사용합니다. FALSE로 설정하면 출력 이미지에 96.0의 DPI가 사용됩니다. BOOL 형식입니다. 기본값은 FALSE입니다. |
AlphaMode D2D1_BITMAPSOURCE_PROP_ALPHA_MODE |
출력의 알파 모드입니다. 미리 두더지 또는 직선일 수 있습니다. 자세한 내용은 알파 모드 를 참조하세요. 형식이 D2D1_BITMAPSOURCE_ALPHA_MODE. 기본값은 D2D1_BITMAPSOURCE_ALPHA_MODE_PREMULTIPLIED. |
방향 D2D1_BITMAPSOURCE_PROP_ORIENTATION |
이미지에서 수행할 대칭 이동 및/또는 회전 작업입니다. 자세한 내용은 방향 을 참조하세요. 형식이 D2D1_BITMAPSOURCE_ORIENTATION. 기본값은 D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT. |
보간 모드
효과는 이미지 크기를 조정하거나 DPI를 수정할 때 이 모드를 사용하여 보간됩니다. 이 효과에서 사용하는 보간 모드는 GPU가 아닌 CPU에 의해 계산됩니다.
속성 | Description |
---|---|
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_NEAREST_NEIGHBOR | 가장 가까운 단일 지점을 샘플하고 사용합니다. Mipmap을 생성하지 않습니다. |
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_LINEAR | 4포인트 샘플 및 선형 보간을 사용합니다. Mipmap을 생성하지 않습니다. |
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_CUBIC | 보간을 위해 16 샘플 입방 커널을 사용합니다. Mipmap을 생성하지 않습니다. |
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_FANT | IWICBitmapScaler 인터페이스와 동일한 WIC 팬트 보간을 사용합니다. Mipmap을 생성하지 않습니다. |
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_MIPMAP_LINEAR | 쌍선형 보간을 사용하여 시스템 메모리에 Mipmap 체인을 생성합니다. 각 mipmap에 대해 효과는 쌍선형 보간을 사용하여 0.5의 가장 가까운 배수로 스케일링한 다음 선형 보간을 사용하여 나머지 양을 스케일링합니다. |
방향
Orientation 속성을 사용하여 이미지 내에 포함된 EXIF 방향 플래그를 적용할 수 있습니다.
속성 | Description |
---|---|
D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT | 기본값 효과는 입력의 방향을 변경하지 않습니다. |
D2D1_BITMAPSOURCE_ORIENTATION_FLIP_HORIZONTAL | 이미지를 가로로 대칭 이동 |
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180 | 이미지를 시계 방향으로 180도 회전합니다. |
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180_FLIP_HORIZONTAL | 이미지를 시계 방향으로 180도 회전하고 가로로 대칭 이동합니다. |
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270_FLIP_HORIZONTAL | 이미지를 시계 방향으로 270도 회전하고 가로로 대칭 이동합니다. |
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90 | 이미지를 시계 방향으로 90도 회전합니다. |
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90_FLIP_HORIZONTAL | 이미지를 시계 방향으로 90도 회전하고 가로로 대칭 이동합니다. |
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270 | 이미지를 시계 방향으로 270도 회전합니다. |
이 코드 조각은 EXIF 방향 값(propkey.h에 정의됨)에서 D2D1_BITMAPSOURCE_ORIENTATION 값으로 변환하는 방법을 보여 줍니다.
#include <propkey.h>
#include <d2d1effects.h>
D2D1_BITMAPSOURCE_ORIENTATION GetBitmapSourceOrientation(unsigned short PhotoOrientation)
{
switch (PhotoOrientation)
{
case PHOTO_ORIENTATION_NORMAL:
return D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT;
case PHOTO_ORIENTATION_FLIPHORIZONTAL:
return D2D1_BITMAPSOURCE_ORIENTATION_FLIP_HORIZONTAL;
case PHOTO_ORIENTATION_ROTATE180:
return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180;
case PHOTO_ORIENTATION_FLIPVERTICAL:
return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180_FLIP_HORIZONTAL;
case PHOTO_ORIENTATION_TRANSPOSE:
return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90_FLIP_HORIZONTAL;
case PHOTO_ORIENTATION_ROTATE270:
return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90;
case PHOTO_ORIENTATION_TRANSVERSE:
return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270_FLIP_HORIZONTAL;
case PHOTO_ORIENTATION_ROTATE90:
return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270;
default:
return D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT;
}
}
알파 모드
속성 | 설명 |
---|---|
D2D1_BITMAPSOURCE_ALPHA_MODE_PREMULTIPLIED | 효과 출력은 미리 곱한 알파를 사용합니다. |
D2D1_BITMAPSOURCE_ALPHA_MODE_STRAIGHT | 효과 출력은 직선 알파를 사용합니다. |
설명
WIC와 Direct2D 를 함께 사용할 때 성능을 최적화하려면 IWICFormatConverter 를 사용하여 앱 시나리오 및 이미지의 네이티브 정밀도에 따라 적절한 픽셀 형식으로 변환해야 합니다.
대부분의 경우 앱의 Direct2D 파이프라인에는 전체 자릿수(bpc)의 채널당 8비트만 필요하거나 이미지는 8bpc 정밀도만 제공하므로 GUID_WICPixelFormat32bppPBGRA 변환해야 합니다. 그러나 이미지에서 제공하는 추가 정밀도(예: 8bpc 정밀도보다 큰 JPEG-XR 또는 TIFF)를 활용하려면 RGBA 기반 픽셀 형식을 사용해야 합니다. 아래 표에서는 자세한 내용을 제공합니다.
원하는 정밀도 | 이미지의 네이티브 정밀도 | 권장 픽셀 형식 |
---|---|---|
채널당 8비트 | <= 채널당 8비트 | GUID_WICPixelFormat32bppPBGRA |
가능한 한 높음 | <= 채널당 8비트 | GUID_WICPixelFormat32bppPBGRA |
가능한 한 높음 | > 채널당 8비트 | RGBA 채널 순서, 미리 곱한 알파 |
많은 이미지 형식이 여러 수준의 정밀도를 지원하므로 IWICBitmapSource::GetPixelFormat 을 사용하여 이미지의 네이티브 픽셀 형식을 가져온 다음 IWICPixelFormatInfo 를 사용하여 해당 형식에 사용할 수 있는 전체 자릿수 채널당 비트 수를 결정해야 합니다. 또한 모든 하드웨어가 고밀도 픽셀 형식을 지원하는 것은 아닙니다. 이러한 경우 높은 정밀도를 지원하기 위해 앱이 WARP 디바이스로 대체되어야 할 수 있습니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 7용 Windows 8 및 플랫폼 업데이트 [데스크톱 앱 | Windows 스토어 앱] |
지원되는 최소 서버 | Windows 7용 Windows 8 및 플랫폼 업데이트 [데스크톱 앱 | Windows 스토어 앱] |
헤더 | d2d1effects.h |
라이브러리 | d2d1.lib, dxguid.lib |