다음을 통해 공유


Convolve 행렬 효과

임의 2D 커널을 이미지에 적용하려면 convolve 행렬 효과를 사용합니다. 이 효과를 사용하여 이미지를 흐리게 하거나, 가장자리를 감지하거나, 엠보를 만들거나, 선명하게 할 수 있습니다.

이 효과에 대한 CLSID는 CLSID_D2D1ConvolveMatrix.

예제 이미지

다음 예제에서는 3 x 3 커널을 사용하여 convolve 행렬 효과의 입력 및 출력을 보여줍니다.

전에
효과 앞에 이미지를 .
변환 후 이미지를 .
ComPtr<ID2D1Effect> convolveMatrixEffect;
m_d2dContext->CreateEffect(CLSID_D2D1ConvolveMatrix, &convolveMatrixEffect);

convolveMatrixEffect->SetInput(0, bitmap);
float matrix[9] = {-1, -1, -1, -1, 9, -1, -1, -1, -1};
convolveMatrixEffect->SetValue(D2D1_CONVOLVEMATRIX_PROP_KERNEL_MATRIX, matrix);

m_d2dContext->BeginDraw();
m_d2dContext->DrawImage(convolveMatrixEffect.Get());
m_d2dContext->EndDraw();

효과 속성

표시 이름 및 인덱스 열거형 묘사
KernelUnitLength
D2D1_CONVOLVEMATRIX_PROP_KERNEL_UNIT_LENGTH
커널에 있는 하나의 단위의 크기입니다. 단위는 (DIP/커널 단위)에 있으며, 여기서 커널 단위는 나선형 커널에 있는 요소의 크기입니다. 값 1(DIP/커널 단위)은 96DPI의 이미지에서 1픽셀에 해당합니다.
FLOAT 형식입니다.
기본값은 1.0f입니다.
ScaleMode
D2D1_CONVOLVEMATRIX_PROP_SCALE_MODE
효과를 사용하여 이미지를 해당 커널 단위 길이로 조정하는 데 사용하는 보간 모드입니다. 품질과 속도에 따라 6가지 배율 모드가 있습니다.
형식이 D2D1_CONVOLVEMATRIX_SCALE_MODE.
기본값은 D2D1_CONVOLVEMATRIX_SCALE_MODE_LINEAR.
KernelSizeX
D2D1_CONVOLVEMATRIX_PROP_KERNEL_SIZE_X
커널 행렬의 너비입니다. 단위는 커널 단위로 지정됩니다. UINT32 유형입니다.
기본값은 3입니다.
KernelSizeY
D2D1_CONVOLVEMATRIX_PROP_KERNEL_SIZE_Y
커널 행렬의 높이입니다. 단위는 커널 단위로 지정됩니다. UINT32 유형입니다.
기본값은 3입니다.
KernelMatrix
D2D1_CONVOLVEMATRIX_PROP_KERNEL_MATRIX
이미지에 적용할 커널 행렬입니다. 커널 요소는 바인딩되지 않으며 부동 소수로 지정됩니다.
FLOAT[]의 첫 번째 KernelSizeX 숫자 집합은 커널의 첫 번째 행에 해당합니다. 두 번째 KernelSizeX 숫자 집합은 두 번째 행에 해당하며 최대 KernelSizeY 행에 해당합니다.
FLOAT[]유형입니다.
기본값은 {0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f}입니다.
제수
D2D1_CONVOLVEMATRIX_PROP_DIVISOR
커널 행렬은 픽셀에 적용된 다음 결과는 이 값으로 나뉩니다.
0은 float 엡실론의 값으로 동작합니다.
FLOAT 형식입니다.
기본값은 1.0f입니다.
바이어스
D2D1_CONVOLVEMATRIX_PROP_BIAS
효과는 커널 행렬, 수차를 적용한 다음 바이어스가 결과에 추가됩니다. 바이어스는 바인딩되지 않고 단위가 없습니다. FLOAT 형식입니다.
기본값은 0.0f입니다.
KernelOffset
D2D1_CONVOLVEMATRIX_PROP_KERNEL_OFFSET
출력 픽셀의 가운데 위치에서 왼쪽/오른쪽 및 위/아래로 지정한 위치로 변환 커널을 이동합니다. 오프셋은 커널 단위로 정의됩니다.
일부 오프셋 및 커널 크기의 경우, 컨볼루션 커널의 샘플은 픽셀 이미지 센터에 배치되지 않습니다. 커널 샘플의 픽셀 값은 쌍선형 보간을 통해 계산됩니다.
형식이 D2D1_VECTOR_2F.
기본값은 {0.0f, 0.0f}입니다.
PreserveAlpha
D2D1_CONVOLVEMATRIX_PROP_PRESERVE_ALPHA
컨볼루션 커널이 알파 채널에 적용되는지 아니면 색 채널에만 적용되는지 여부를 지정합니다.
이 값을 true 설정하면 컨볼루션 커널이 색 채널에만 적용됩니다.
이 값을 false 설정하면 모든 채널에 나선형 커널이 적용됩니다.
BOOL 유형입니다.
기본값은 FALSE입니다.
BorderMode
D2D1_CONVOLVEMATRIX_PROP_BORDER_MODE
소프트 또는 하드 이미지의 테두리를 계산하는 데 사용되는 모드입니다. 자세한 내용은 테두리 모드 참조하세요.
형식이 D2D1_BORDER_MODE.
기본값은 D2D1_BORDER_MODE_SOFT.
ClampOutput
D2D1_CONVOLVEMATRIX_PROP_CLAMP_OUTPUT
효과가 그래프의 다음 효과에 값을 전달하기 전에 효과가 색 값을 0에서 1 사이로 고정하는지 여부입니다. 이 효과는 알파를 미리 곱하기 전에 값을 고정합니다.
TRUE로 설정하면 효과가 값을 고정합니다. FALSE로 설정하면 효과는 색 값을 고정하지 않지만, 다른 효과와 출력 표면은 충분히 높은 정밀도가 아닌 경우 값을 고정할 수 있습니다.
BOOL 유형입니다.
기본값은 FALSE입니다.

크기 조정 모드

열거형 묘사
D2D1_CONVOLVEMATRIX_SCALE_MODE_NEAREST_NEIGHBOR 가장 가까운 단일 지점을 샘플링하고 사용합니다. 이 모드는 처리 시간을 줄이지만 가장 낮은 품질의 이미지를 출력합니다.
D2D1_CONVOLVEMATRIX_SCALE_MODE_LINEAR 4포인트 샘플 및 선형 보간을 사용합니다. 이 모드는 가장 가까운 인접 모드보다 더 높은 품질의 이미지를 출력합니다.
D2D1_CONVOLVEMATRIX_SCALE_MODE_CUBIC 보간을 위해 16 샘플 입방 커널을 사용합니다. 이 모드는 가장 많은 처리 시간을 사용하지만 더 높은 품질의 이미지를 출력합니다.
D2D1_CONVOLVEMATRIX_SCALE_MODE_MULTI_SAMPLE_LINEAR 좋은 에지 앤티앨리어싱을 위해 단일 픽셀 내에 4개의 선형 샘플을 사용합니다. 이 모드는 픽셀이 적은 이미지에서 소량으로 축소하는 데 적합합니다.
D2D1_CONVOLVEMATRIX_SCALE_MODE_ANISOTROPIC 이방성 필터링을 사용하여 비트맵의 변형된 모양에 따라 패턴을 샘플링합니다.
D2D1_CONVOLVEMATRIX_SCALE_MODE_HIGH_QUALITY_CUBIC 변형 매트릭스에 다운스케일링이 관련된 경우 가변 크기의 고품질 입방 커널을 사용하여 이미지의 미리 다운스케일을 수행합니다. 그런 다음 최종 출력에 입방 보간 모드를 사용합니다.

메모

모드를 선택하지 않으면 효과가 기본적으로 D2D1_CONVOLVEMATRIX_SCALE_MODE_LINEAR.

테두리 모드

이름 묘사
D2D1_BORDER_MODE_SOFT 이 효과는 변환 커널을 적용할 때 입력 범위를 벗어난 샘플에 대해 투명한 검은색 픽셀로 입력 이미지를 패딩합니다. 그러면 이미지에 대한 부드러운 가장자리가 만들어지고 프로세스에서 커널 크기로 출력 비트맵을 확장합니다.
D2D1_BORDER_MODE_HARD 이 효과는 입력 범위를 벗어난 샘플에 대한 미러 형식 테두리 변환을 사용하여 입력 이미지를 확장합니다. 출력 비트맵의 크기는 입력 비트맵의 크기와 같습니다.

출력 비트맵

효과 출력의 크기는 컨볼루션 커널의 크기, 커널 오프셋, 커널 단위 길이 및 테두리 모드 설정에 따라 달라집니다.

요구 사항

요구
지원되는 최소 클라이언트 Windows 7용 Windows 8 및 플랫폼 업데이트 [데스크톱 앱 | Windows 스토어 앱]
지원되는 최소 서버 Windows 7용 Windows 8 및 플랫폼 업데이트 [데스크톱 앱 | Windows 스토어 앱]
머리글 d2d1effects.h
도서관 d2d1.lib, dxguid.lib

ID2D1Effect