일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Visual Studio
- 알고리즘
- Programming
- 배열
- 백준
- 함수
- Windows
- doit코틀린프로그래밍
- c++
- Win32
- Desktop
- Direct2D
- 지식나눔강좌
- 이지스퍼블리싱
- Tips프로그래밍강좌
- 포인터
- Tips강좌
- 문법
- 티스토리
- 프로그래밍
- VS ERROR
- Kotlin
- Javascript
- c#
- 김성엽
- 연산자
- c
- tipssoft
- 리뷰
- CS
- Yesterday
- Today
- Total
F.R.I.D.A.Y.
Direct2D - WIC IBitmapSource 본문

픽셀 집합을 나타내는 WIC의 기본 단위
Index
- IBitmapSource
- 하위 인터페이스
- 연산의 방식
- 코드 예제
IBitmapSourcecopy^
앞으로 이미지를 불러와서 진행하는 것이 많을텐데, 그 과정에서 IBitmapSource에 무엇이 있는지 알아볼 필요가 있습니다. 이 구조를 많은 메서드에서 이용하기 때문이죠.
하위 인터페이스copy^
Bitmap Sources Overview - Win32 apps
This topic introduces bitmap sources, a core Windows Imaging Component (WIC) component that represents the bitmap pixels of an image.
docs.microsoft.com
이 페이지에서 보면 다음과 같은 대상이 이 인터페이스를 상속받아 구현되어 있다고 말합니다.
- IWICBitmapFrameDecode
- IWICBitmap
- IWICBitmapClipper
- IWICBitmapFlipRotator
- IWICBitmapScaler
- IWICColorTransform
- IWICFormatConverter
연산의 방식copy^
WIC의 작업은 메서드를 활용해 이미지를 조절하더라도 그 결과가 전달한 변수에 즉각적으로 대응하지 않습니다. 만일 크기 조정을 위해 IWICBitmapScaler를 이용했다면 아래와 같은 결과를 낳죠.

IWICBitmapSource 인터페이스로 구현된 이미지의 크기를 조정하기 위해 IWICBitmapScaler를 생성하고 그 안의 Initialize 메서드를 이용해 크기를 조절했다면 기존 IWICBitmapSource 이미지의 크기가 줄어드는 것이 아닌, IWICBitmapSource를 베이스로 연산된 결과를 IWICBitmapScaler 객체가 저장을 하고 있습니다.
코드 예제copy^
우리는 아무것도 변형하지 않은 이미지를 출력할 때는 IWICBitmapFrameDecoder를 IWICFormatConverter에 넣어서 이미지 포맷을 수정하고 이를 ID2D1HwndRenderTarget에 넣어서 D2D 이미지를 생성 및 출력했습니다.
IWICFormatConverter의 Initialize 메서드의 원형을 보면 다음과 같습니다.
HRESULT Initialize(
IWICBitmapSource *pISource,
REFWICPixelFormatGUID dstFormat,
WICBitmapDitherType dither,
IWICPalette *pIPalette,
double alphaThresholdPercent,
WICBitmapPaletteType paletteTranslate
);
포맷을 변형할 대상인 첫 번째 인자의 타입이 IWICBitmapSource입니다. 즉, 변형을 가했다면 IWICBitmapFrameDecode를 다시 만들것이 아니라 변형을 가한 데이터를 그대로 넣을 수 있는 것입니다.
ID2D1HwndRenderTarget *pRT;
ID2D1Bitmap* pBitmap;
IWICImagingFactory* pWicFactory;
IWICBitmapDecoder* pDecoder;
IWICBitmapFrameDecode* pFrame;
IWICBitmapScaler* pScaler;
IWICFormatConverter* pConverter;
// 관련 객체가 모두 생성되었다고 가정
pWicFactory->CreateBitmapFromFilename(..., &pDecoder);
// 파일 불러오기
pDecoder->GetFrame(0, &pFrame);
// 이미지 프레임 추출
pScaler->Initialize(pFrame, ...);
// 변형
pConverter->Initialize(pScaler, ...);
// 최종 데이터 포맷 변경
pRT->CreateBitmapFromWicBitmap(pConverter, nullptr, &pBitmap);
// D2D에서 사용가능한 비트맵 형식으로 로드
'DEV > Direct2D' 카테고리의 다른 글
Direct2D - WIC IWICFormatConverter (0) | 2021.04.29 |
---|---|
Direct2D - WIC IWICBitmapScaler (0) | 2021.04.29 |
Direct2D - WIC를 이용해 이미지 그리기 (1) | 2021.04.24 |
Direct2D - WIC 비트맵 그리기 사전 작업 (0) | 2021.04.24 |
DirectWrite - IDWriteFactory (0) | 2021.04.21 |