일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- Tips강좌
- Windows
- 김성엽
- 문법
- 티스토리
- Direct2D
- 배열
- Tips프로그래밍강좌
- 포인터
- Programming
- Desktop
- tipssoft
- CS
- c#
- 이지스퍼블리싱
- Kotlin
- 백준
- VS ERROR
- Visual Studio
- doit코틀린프로그래밍
- Javascript
- 리뷰
- c
- 프로그래밍
- 지식나눔강좌
- Win32
- 함수
- 알고리즘
- 연산자
- c++
- Yesterday
- Today
- Total
목록DEV/Direct2D (31)
F.R.I.D.A.Y.
Direct2D에서 그래픽 변형을 가할 수 있는 SetTransform 메서드 그래픽 변형 그래픽 변형이라 함은 아래의 것들이 있습니다. 크기 조절 회전 반전 이동 이러한 항목들은 WIC 컴포넌트에서도 구현할 수 있지만, 그 속도가 느립니다. 만일 그리기 위한 그래픽 변형을 한다면 Direct2D에서 제공하는 SetTransform 메서드를 이용하는 것이 좋습니다. SetTransform SetTransform 메서드는 그래픽 변형을 가하는 메서드로서, 두 개의 오버로드가 존재합니다. 여기에서는 레퍼런스 참조를 통한 메서드를 기본으로 합니다.[# 레퍼런스 참조를 하는 메서드는 아마도 어드레스 참조를 하는 메서드를 이용해 구현했겠죠.] 메서드 원형 void SetTransform( const D2D1_MA..
이미지를 회전하거나 반전시킬 수 있는 IWICBitmapFlipRotator IWICBitmapFlipRotator 이미지를 회전하거나 반전시킬 수 있는 인터페이스입니다. 단점 먼저 구현 및 시연을 하기 전에 단점을 들자면, 기준에 맞추어 원하는 각도로 변형은 불가능합니다. 애초에 WIC가 Windows Imaging Component의 약자로, 불러오기 및 저장하기가 주된 목적이기 때문입니다. 따라서 만일 90°의 배수로 이미지를 회전시키는 경우가 아니라면 IWICBitmapFlipRotator 객체는 사용할 수 없습니다. 이미지 반전의 경우 상하, 좌우 변형만 가능합니다. 구현 IWICBitmapFlipRotator의 구현은 IWICImagingFactory에서 할 수 있습니다. IWICImaging..
대상 비트맵을 일정 영역 잘라내는 IWICBitmapClipper IWICBitmapClipper 가끔 이미지 작업을 하면 이미지의 일부를 잘라내야하는 작업이 필요합니다. 단적인 예로, 게임에서 움직이는 대상의 움직임을 하나의 이미지 파일로 생성하고, 움직이는 모션을 보일 때는 그 이미지를 필요한 모션을 찾아 잘라 사용하는 방식도 있습니다. 웹에서는 여러 아이콘 파일을 하나의 이미지로 생성하고 필요한 위치에 이미지를 잘라서 로드하는 방식을 이용합니다. 구현 IWICBitmapClipper의 구현은 IWICImagingFactory 객체에서 구현할 수 있습니다. IWICImagingFactory* pWicFactory; IWICBitmapClipper* pClipper; // IWICImagingFacto..
비트맵의 포맷을 변경하는 IWICFormatConverter IWICFormatConverter 비트맵은 꽤 다양한 형식을 가지고 있습니다. 애초에 형식이라는게 비트맵 생성자가 비트맵 형식을 설명해주는 것으로 어떻게 만들던 상관은 없죠.[# 뭐 성능 좋은 형식이라면 금상첨화지만] 그러나 사용자가 요구하는 비트맵 형식이 있기도 합니다. Direct2D가 그 예입니다. Direct2D - WIC를 이용해 이미지 그리기 WIC는 Windows Imaging Component라는 이름을 가진 코덱 프레임워크이다. # 해당 내용은 Direct2D의 기본 구조를 알고 있어야 진행이 원활합니다. # 해당 내용은 다음 포스트를 기반에 두고 있습니다. WIC pang2h.tistory.com 여기에서 잠깐 소개 했지만,..
비트맵 크기를 조절할 수 있는 IWICBitmapScaler IWICBitmapScaler IBitmapSource를 기반으로 구현된 인터페이스로, 대상의 크기를 조절할 때 사용합니다. 사용해야하는 이유 모든 이미지가 출력할 크기와 맞다면 모르겠지만, 많은 경우가 출력할 크기와 실제 파일의 width, height 크기가 다릅니다. 만일 원본에 크기 변형을 가하지 않은 상태로 그리게되면, 상당히 깨진 모습을 볼 수 있습니다. 다음은, 휴대폰에서 낼 수 있는 최대 화소인 1억 800만 카메라로 촬영한 이미지를 윈도우 전체에 출력한 모습입니다. 우측의 이미지는 Windows10에 내장된 사진 앱으로 파일을 열었을 때입니다. 사진 앱으로 열었을 때는 부드럽게 표현되는 이미지가 프로그램에서 열었을 때는 일부 깨..
픽셀 집합을 나타내는 WIC의 기본 단위 IBitmapSource 앞으로 이미지를 불러와서 진행하는 것이 많을텐데, 그 과정에서 IBitmapSource에 무엇이 있는지 알아볼 필요가 있습니다. 이 구조를 많은 메서드에서 이용하기 때문이죠. 하위 인터페이스 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 이 페이지에서 보면 다음과 같은 대상이 이 인터페이스를 상속받아 구현되어 있다고 말합니다. IWICBitmapFra..
WIC는 Windows Imaging Component라는 이름을 가진 코덱 프레임워크이다. # 해당 내용은 Direct2D의 기본 구조를 알고 있어야 진행이 원활합니다. # 해당 내용은 다음 포스트를 기반에 두고 있습니다. WIC WIC는 COM[# Component Object Model] 객체로서, 이를 이용하려면 사용하려는 프로그램[# 정확히는 프로세스]에서 COM 객체의 메서드와 같은 요소에 접근하는 것을 허용하도록 해야합니다. 애플리케이션의 시작에서 CoInitialize 함수를 호출합니다. 코드에서는 WinMain의 코드가 되겠네요. HRESULT hr = CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); if (!win.Create(L"Win32 W..
Windows Imaging Component라고 해서 WIC라는 COM 요소가 있다. Windows Vista부터 나온 코덱 관리 프레임워크인데 이 녀석을 사용하면 여러가지 포맷을 하나의 메서드로 이용할 수가 있어서 개발할 때 편할 것 같다. WIC WIC는 COM[# Component Object Model]으로서 사용하려면 WIC를 사용하고 있는 스레드에서 COM 객체의 요소에 접근할 수 있도록 설정해주어야 한다. CoInitialize 그래서 있는게 이 CoInitialize 함수이다. msdn에는 이 함수보다 CoInitializeEx 함수를 이용한 것을 권장하고 있다. 간단히 설명하면 이 함수를 통해서 COM 객체 안의 명령을 COM을 이용하고자 하는 위치에서 접근할 수 있도록 해주는 기능을 ..
Direct2D에서 텍스트 출력을 시행하기 전, 필요한 리소스를 생성할 수 있는 인터페이스 IDWriteFactory IUnknown 인터페이스로부터 상속받았기 때문에, 종종 IUnknown 으로 캐스팅해 넘길 때가 있습니다. CreateTextFormat 텍스트 레이아웃을 위한 객체를 생성합니다. 여기에서 텍스트 레이아웃이란 텍스트를 그릴 영역의 크기를 의미합니다. 만일 이 레이아웃의 크기보다 그리게 되는 텍스트의 크기가 큰 경우에는 알맞게 조정됩니다. 단, 영역 외로 그리지 못하게 했다면 해당 영역에 그려지는 부분만 화면에 노출됩니다. 이런 식의 텍스트를 그린다고 했을 때, 빨간 색 영역만큼을 텍스트 레이아웃으로 정하게 한 뒤, 문자열을 그리게 하면, ex의 일부만 나오게 되는 것입니다. 이렇게 말이..
Direct2D의 DirectWrite를 되짚어봅니다. DirectWrite DirectWrite[# 이하 DWrite]는 Direct2D에서 텍스트를 그리기 위한 인터페이스입니다. 필요 항목 DWrite는 사용하기 위해 아래의 내용이 필요합니다. ID2D1Factory ID2D1HwndRenderTarget IDWriteFactory IDWriteTextFormat ID2D1SolidColorBrush 초기화 순서 DWrite는 아래의 순서로 초기화를 진행합니다. Direct2D의 기반이 되는 ID2D1Factory를 초기화하고, 그렇게 만들어진 팩토리 객체로 하위 두 개[# ID2D1HwndRenderTarget, IDWriteFactory]의 객체를 추가로 초기화합니다. 그리고 각각의 객체를 통해 ..